user-0 提问: 数字排列次数

回复:
user: user-1
content: 这个功能应该用组合，不是排列，C(33, 6)=1107568

user: user-0
content: 引用 5 楼 u013043254 的回复:如果要是要顺序输出  你那个有可能出现  12 13 9 15 10 11 这种不顺序的可能，建议在 i++前再加一个判断大小的语句 好提议，这个真没想到。

user: user-2
content: 如果要是要顺序输出  你那个有可能出现  12 13 9 15 10 11 这种不顺序的可能，建议在 i++前再加一个判断大小的语句

user: user-2
content: a b c d e f 初值都是0就好了，如果按1 2 3 4 5 6 赋初值的话 会少很多可能，因为也可能是6 5 4 3 2 1的结果

user: user-0
content: 2楼这个代码很多我看不懂，应该是在指定的每组数字中选入几个数字，执行后结果存放于cp.txt这个文件中，而结果是选中的这些数字的排列。是这样吧！

user: user-3
content: 仅供参考：//要求1:从给出来的不同的六组数字中，从每组任意挑选一个数字，最后组成一个六个数字的数组。 //将所有的数组全部列出来。 //同时，排除全部为偶数、全部为奇数的数组。 //排除四个数字递增连续（比如8、9、10、11）的数组。 //如下： //第一个数字从这12个数字中挑选：,1,3,2,4,5,6,7,8,9,10,11,12 //第二个数字从这17个数字中挑选：,8,7,5,9,6,4,11,10,12,13,3,14,17,2,16,15,18 //第三个数字从这21个数字中挑选：,13,10,15,16,18,11,14,12,7,19,21,17,8,22,9,20,6,23,5,24,25 //第四个数字从这20个数字中挑选：,22,23,18,20,16,17,15,21,14,26,19,24,27,25,12,13,11,10,28,29 //第五个数字从这19个数字中挑选：,26,25,27,29,30,28,23,24,20,22,19,31,21,17,18,32,13,15,16 //第六个数字从这14个数字中挑选：,32,33,30,31,29,28,27,26,25,24,23,22,18,21 //要求2: //请输入第1个数字的选择范围：（可以手动输入任意几个空格间隔的数字,最多30个） //请输入第2个数字的选择范围：（可以手动输入任意几个空格间隔的数字,最多30个） //请输入第3个数字的选择范围：（可以手动输入任意几个空格间隔的数字,最多30个） //请输入第4个数字的选择范围：（可以手动输入任意几个空格间隔的数字,最多30个） //请输入第5个数字的选择范围：（可以手动输入任意几个空格间隔的数字,最多30个） //请输入第6个数字的选择范围：（可以手动输入任意几个空格间隔的数字,最多30个） //然后回车，输出结果到cp.txt //要求3: //保证同一组数据的数都不相同。 //比如，第一个数为6时，第二个数或其他的数都不能再为6；第二个数为10时，第三个数或其他的数都不能再为10，以此类推…… //要求4: //增加一个条件：在产生的每个数组A1A2A3A4A5A6中，要求A1<A2<A3<A4<A5<A6 #include <stdio.h> #include <stdlib.h> #include <string.h> int v[6]; int n[6]={12,17,21,20,19,14}; int d[6][30]={       {1,3,2,4,5,6,7,8,9,10,11,12},       {8,7,5,9,6,4,11,10,12,13,3,14,17,2,16,15,18},       {13,10,15,16,18,11,14,12,7,19,21,17,8,22,9,20,6,23,5,24,25},       {22,23,18,20,16,17,15,21,14,26,19,24,27,25,12,13,11,10,28,29},       {26,25,27,29,30,28,23,24,20,22,19,31,21,17,18,32,13,15,16},       {32,33,30,31,29,28,27,26,25,24,23,22,18,21}, }; int i,j,i0,i1,i2,i3,i4,i5,s; char ln[100],*t; FILE *f; int main() {     for (i=0;i<6;i++) {         printf("请输入第%d个数字的选择范围：",i+1);         fgets(ln,100,stdin);         j=0;         t=strtok(ln," ");         while (1) {             if (NULL==t) break;             if (0==t[0]) continue;//跳过多个空格间隔时取出的空串             d[i][j]=atoi(t);             j++;             if (j>=30) break;             t=strtok(NULL," ");         }         n[i]=j;     }     f=fopen("cp.txt","w");     if (NULL==f) {         printf("无法生成cp.txt!\n");         return 1;     }     printf("正在生成cp.txt...");     for (i0=0;i0<n[0];i0++) {     for (i1=0;i1<n[1];i1++) {     for (i2=0;i2<n[2];i2++) {     for (i3=0;i3<n[3];i3++) {     for (i4=0;i4<n[4];i4++) {     for (i5=0;i5<n[5];i5++) {         v[0]=d[0][i0];         v[1]=d[1][i1];         v[2]=d[2][i2];         v[3]=d[3][i3];         v[4]=d[4][i4];         v[5]=d[5][i5];         if (0==(v[0]%2)          && 0==(v[1]%2)          && 0==(v[2]%2)          && 0==(v[3]%2)          && 0==(v[4]%2)          && 0==(v[5]%2)) continue;//排除全部为偶数         if (1==(v[0]%2)          && 1==(v[1]%2)          && 1==(v[2]%2)          && 1==(v[3]%2)          && 1==(v[4]%2)          && 1==(v[5]%2)) continue;//排除全部为奇数         for (i=0;i<5;i++) {             for (j=i+1;j<6;j++) {                 if (v[i]==v[j]) goto NEXT;//保证同一组数据的数都不相同             }         }     NEXT:         if (i>=5) {             for (i=0;i<5;i++) for (j=i+1;j<6;j++) if (v[i]>v[j]) {s=v[i];v[i]=v[j];v[j]=s;}//从小到大排序             if ((v[0]+1==v[1]               && v[1]+1==v[2]               && v[2]+1==v[3])              || (v[1]+1==v[2]               && v[2]+1==v[3]               && v[3]+1==v[4])              || (v[2]+1==v[3]               && v[3]+1==v[4]               && v[4]+1==v[5])) continue;//排除四个数字递增连续             fprintf(f,"%2d,%2d,%2d,%2d,%2d,%2d\n",v[0],v[1],v[2],v[3],v[4],v[5]);         }     }}}}}}     fclose(f);     printf("\n生成cp.txt完毕\n");     return 0; } //如果文件in.txt的内容为 //1 3 2 4 5 6 7 8 9 10 11 12 //8 7 5 9 6 4 11 10 12 13 3 14 17 2 16 15 18 //13 10 15 16 18 11 14 12 7 19 21 17 8 22 9 20 6 23 5 24 25 //22 23 18 20 16 17 15 21 14 26 19 24 27 25 12 13 11 10 28 29 //26 25 27 29 30 28 23 24 20 22 19 31 21 17 18 32 13 15 16 //32 33 30 31 29 28 27 26 25 24 23 22 18 21 //可以在cmd窗口里面输入命令 //cp <in.txt //得到要求1对应的结果 //BTW:中了一定要分我六成啊！嘿嘿！(^=^)

user: user-4
content: 不懂那规则，看你代码是在 a b c d e f全不相等的时候累加i，应该没问题