CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  新手乐园

简单的迭代程序,高手来看看

楼主wangpr()2004-08-04 12:43:42 在 C/C++ / 新手乐园 提问

PrintOdd_Even(int   pos,int   odd,int   even,char   *   a,ofstream   fileout)  
  {  
   
  if   (pos   ==   0)  
  {  
  char   aa[7]={'1','\0','\0','\0','\0','\0','\0'};  
                                      int   temp=odd-1;  
  PrintOdd_Even(1,temp,even,aa,fileout);  
  char   bb[7]={'2','\0','\0','\0','\0','\0','\0'};  
  temp=even-1;  
  PrintOdd_Even(1,odd,temp,bb,fileout);  
  return;  
          }  
  if   (pos   ==   7)    
  {  
  for(int   i=0;i<7;i++)  
          fileout<<a[i]<<"   ";  
  cout<<endl;  
  return;  
  }  
  if   (odd   !=   0)  
  {  
  a[pos++]='1';  
  pos++;  
  odd--;  
  PrintOdd_Even(pos,odd,even,a,fileout);  
  }  
  if   (even   !=   0)  
  {  
  a[pos++]='2';  
  pos++;  
  even--;  
  PrintOdd_Even(pos,odd,even,a,fileout);  
   
  }  
  }  
   
  我想打印出比如7个数中所有奇偶比为4:3的可能组合,POS是数组当前位置,ODD是奇数个数,EVEN是偶数个数,我跟踪了程序在打印出第一种可能性后就出错退出了,谁能帮我看看是哪的错啊 问题点数:65、回复次数:15Top

1 楼RookieStar(Yukon)回复于 2004-08-04 12:58:26 得分 45

给一个你的理想输入和理想输出先。Top

2 楼wangpr()回复于 2004-08-04 13:03:07 得分 0

比如我输入(0,4,3,a,fileout)  
  能输入7个数中所有奇偶比为4:3的可能     比如   1111222   1122112   等等Top

3 楼RookieStar(Yukon)回复于 2004-08-04 13:06:50 得分 0

a又是什么呢?Top

4 楼RookieStar(Yukon)回复于 2004-08-04 13:07:27 得分 0

不好意思,我明了Top

5 楼wangpr()回复于 2004-08-04 13:08:50 得分 0

呵呵,帮我想想啊,我的程序写出一行后就出错了,不明白怎么回事Top

6 楼wangpr()回复于 2004-08-04 13:26:34 得分 0

怎么没人回啊Top

7 楼wangpr()回复于 2004-08-04 13:40:40 得分 0

UP   好心人帮我看看Top

8 楼RookieStar(Yukon)回复于 2004-08-04 13:44:24 得分 0

我大概看了一下,  
  PrintOdd_Even(int   pos,int   odd,int   even,char   *   a,ofstream   fileout)  
  这句每次都是传给局部变量fileout,你用ofstream&   fileout试试。Top

9 楼wanamaker()回复于 2004-08-04 13:52:26 得分 0

我觉得用ofstream   fileout倒没有问题,  
  问题在于:  
  if   (odd   !=   0)  
  {  
  a[pos++]='1';  
  -----> //pos++;   //上一句pos已经自增了一次了,这里不需要在加1    
  odd--;  
  PrintOdd_Even(pos,odd,even,a,fileout);  
  }  
  if   (even   !=   0)  
  {  
  a[pos++]='2';  
  -----> //pos++;   //上一句pos已经自增了一次了,这里不需要在加1                     even--;  
  PrintOdd_Even(pos,odd,even,a,fileout);  
   
  }  
  Top

10 楼wangpr()回复于 2004-08-04 13:56:04 得分 0

对,我的程序本来就没那句,测试的时候写乱了,帖出来忘删掉了,应该不是这的错。   FILIOUT我正在试Top

11 楼rockhard(不签名)回复于 2004-08-04 14:35:02 得分 20

//   ttt.cpp   :   Defines   the   entry   point   for   the   console   application.  
  //  
   
  #include   "stdafx.h"  
  #include   <IOSTREAM.H>  
   
  char   buff[7];  
   
   
  #define   BUFF_NUM           (sizeof(buff)/sizeof(buff[0])   )  
   
   
  void   PrintOdd_Even(int   pos,int   odd,int   even,char   *   a)  
  {  
  if   (pos   ==   BUFF_NUM)    
  {  
  for(int   i=0;i<BUFF_NUM;i++)  
  cout<<a[i]<<"   ";  
   
  cout<<endl;  
  return;  
  }  
  if   (odd   !=   0)  
  {  
  a[pos++]='1';  
  odd--;  
  PrintOdd_Even(pos,odd,even,a);  
  pos--;  
  odd++;  
  }  
   
  if   (even   !=   0)  
  {  
  a[pos++]='2';  
  even--;  
  PrintOdd_Even(pos,odd,even,a);  
  pos--;  
  even++;  
  }  
  }  
   
   
  int   main(int   argc,   char*   argv[])  
  {  
  PrintOdd_Even(0,3,4,buff);  
  return   0;  
  }  
  Top

12 楼rockhard(不签名)回复于 2004-08-04 14:37:47 得分 0

我把它改成从控制台输出了,便于看,你自己改回去吧。  
  Top

13 楼RookieStar(Yukon)回复于 2004-08-04 14:50:13 得分 0

楼主还没测试好吗?我帮你稍微修改了一下,主要就是我前面说的那个问题。  
  #include<fstream>  
  using   namespace   std;  
   
  void   PrintOdd_Even(int   pos,int   odd,int   even,char   *   a,ofstream&   fileout)  
  {  
   
  if   (pos   ==   0)  
  {  
  char   aa[7]={'1','\0','\0','\0','\0','\0','\0'};  
                                      int   temp=odd-1;  
  PrintOdd_Even(1,temp,even,aa,fileout);  
  char   bb[7]={'2','\0','\0','\0','\0','\0','\0'};  
  temp=even-1;  
  PrintOdd_Even(1,odd,temp,bb,fileout);  
  return;  
          }  
  if   (pos   ==   7)    
  {  
  for(int   i=0;i<7;i++)  
          fileout<<a[i]<<"   ";  
  fileout<<endl;  
  return;  
  }  
  if   (odd   !=   0)  
  {  
  a[pos++]='1';  
  odd--;  
  PrintOdd_Even(pos,odd,even,a,fileout);  
  }  
  if   (even   !=   0)  
  {  
  a[pos++]='2';  
  even--;  
  PrintOdd_Even(pos,odd,even,a,fileout);  
   
  }  
  }  
   
  int   main()  
  {  
  ofstream   file("abc.txt",ios::out);  
  char   str[8]="";  
  PrintOdd_Even(0,4,3,str,file);  
  file.close();  
  return   0;  
  }  
  Top

14 楼rockhard(不签名)回复于 2004-08-04 14:56:59 得分 0

 
   
  楼上的递归过程中没有回溯,输出好象不对。  
   
  Top

15 楼wangpr()回复于 2004-08-04 15:23:26 得分 0

我刚试了一下   应该就是fileout的问题,现在程序差不多快搞定了Top

相关问题

  • 迭代器iterator在程序到底起什么作用?
  • 简单小程序!
  • 求简单程序!
  • 驳《STL程序设计实践二: 注意迭代子的失效》一文,看官帮我提一提
  • 请大家谈谈对《程序员》第6期《大话迭代器:实践与应用》一文的意见
  • 求教:如何用迭代编制汉洛塔的程序(用c语言写出来).
  • 如何使用迭代实现汉洛塔问题的解答(用c语言写出程序)
  • 迭代器!
  • 求简单pascal原程序
  • 求.java最简单程序

关键词

  • printodd
  • fileout
  • odd
  • pos
  • buff
  • temp
  • aa
  • bb
  • char

得分解答快速导航

  • 帖主:wangpr
  • RookieStar
  • rockhard

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo