作者liu2007 (薯)
看板C_and_CPP
标题Re: [问题] 0与1的排列组合
时间Sat Sep 26 04:02:14 2009
1F:→ tonyhcc:我的想法是当 n=1 只有两种情0和1 n=2 就是递回去呼叫09/26 03:53
2F:→ tonyhcc:n=1 的情形加以组合09/26 03:54
tony大的方式我有想过
#include <stdio.h>
#include <stdlib.h>
void recursive(
char *ch,
int n,
int i,
char bit);
int count = 0;
int main()
{
char *ch;
int n;
scanf("%d", &n);
ch = (
char* )malloc(
sizeof(
char)*n);
recursive(ch, n, n, '0');
recursive(ch, n, n, '1');
printf("%d\n", count);
return 0 ;
}
void recursive(
char *str,
int n,
int i,
char bit)
{
if ( i == 0)
{
printf("%s\n", str);
count++;
}
else
{
*(str +n-i) = bit;
recursive(str, n, i-1, '0');
recursive(str, n, i-1, '1');
}
}
这样有两个问题(或三个)
第一个
当要印出来的时候else里有两个recursive的呼叫
所以每一种结果都会印两次
我不知道怎麽修掉=.=
再来的问题就是
递回的精神不就是main里面叫一次递回就可以直接解决问题的吗?
我用了两次(0、1)
好像不对......
另外一个问题就是我怕老师会说我这不是用排列的
而是用产生的
下个礼拜还要去问助教可不可以...
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.232.63.167
4F:→ cutecpu:不过突然发现, malloc size 应该等於 sizeof(char)*n+1 09/26 11:07
5F:→ cutecpu:然後记得补 0 => ch[n]=0; 09/26 11:08
6F:→ reon:用shift 可以吗 XD 09/26 13:13
7F:→ liu2007:不懂,为什麽size会 = n+1 ?? 另外ch[n] = '0'要加在哪 09/26 13:43
8F:→ liu2007:里呢? 09/26 13:43