简单的迭代程序,高手来看看
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




