有362880种排列,如何用c 语言将它们排出来。
1到9,9个数字,有362880种排列,如何用c 语言将它们排出来。请大师们指点。最好给出源代码。谢谢!
上面的程序有问题,首先对指针没有初始化,其次结果不合要求。题意要求输出9位数字的所有组合(这9位数字不能重复),而给出的程序却只能输出有重复的组合。 下面是我给出的修正。 void func(char *num, int n) //输出1~n的所有排列(n 9) { printf("n must be greater than 0 and no more than 9。
\n"); return; } len = strlen(num); for (i = 1; i <= n; i++) { itoa(i, &ch, 10); for (j = 0; j < len; j++) { if (ch == num[j]) break; } if (j < len) continue; strcat(num, &ch); func(num, n); //递归调用 num[len] = 0; } if (n == len) printf("%s\n", num); } void main() { char a[10]={0}; func(a,9); } 。
简单地用9层循环即可,下面用的是递归输出M个数字的排列: #define M 3 func(char *beforeNumber, int n) { int i; char *tmp; if (n==1) { for (i=1;i 1) { for (i=1;i<=M;i++) { itoa(i,tmp,10); strcat(beforeNumber,tmp); func(beforeNumber, n-1); beforeNumber[strlen(beforeNumber)-1]=0x00; } } } main() { clrscr(); func("", M); getch(); }
问:挺简单的一C函数,不过我是初学者,暂时还不会写,请好心人多多帮忙!
答:int mystrlen(char *str) { int n = 0; while (*str) { n++; str++;} return n; } voi...详情>>