C语言全排列问题
问题:四位数abcd和efgh,一位数x,满足下面条件:abcd*x=efgh,其中a,b,c,d,e,f,g,h,x是1~9里的任意一个数且各不相同!编写的程序是将9个...
问题:
四位数abcd和efgh,一位数x,满足下面条件:
abcd*x=efgh,其中a,b,c,d,e,f,g,h,x是1~9里的任意一个数且各不相同!
编写的程序是将9个数全排,再对号入座:int a[10]={0,1,2,3,4,5,6,7,8,9},n=9;
void perm(int k)
{ int t,j,i; if( k==n ) { return; }for(j=k;j<=n;j++)
{t=a[k];a[k]=a[j];a[j]=t;</p><p>perm(k+1);</p><p>t=a[k];a[k]=a[j];a[j]=t;} if((a[1]*1000+a[2]*100+a[3]*10+a[4])*a[5] ==(a[6]*1000+a[7]*100+a[8]*10+a[9])){ for(i=1;i<=n;i++) printf("%2d",a[i]); printf("\n"); }}
main() { perm(1); } 能解释一下全排语句for(j=k;j<=n;j++)
{t=a[k];a[k]=a[j];a[j]=t;</p><p>perm(k+1);</p><p>t=a[k];a[k]=a[j];a[j]=t;} 的意思吗??????????看不太懂唉!!!! 展开
四位数abcd和efgh,一位数x,满足下面条件:
abcd*x=efgh,其中a,b,c,d,e,f,g,h,x是1~9里的任意一个数且各不相同!
编写的程序是将9个数全排,再对号入座:int a[10]={0,1,2,3,4,5,6,7,8,9},n=9;
void perm(int k)
{ int t,j,i; if( k==n ) { return; }for(j=k;j<=n;j++)
{t=a[k];a[k]=a[j];a[j]=t;</p><p>perm(k+1);</p><p>t=a[k];a[k]=a[j];a[j]=t;} if((a[1]*1000+a[2]*100+a[3]*10+a[4])*a[5] ==(a[6]*1000+a[7]*100+a[8]*10+a[9])){ for(i=1;i<=n;i++) printf("%2d",a[i]); printf("\n"); }}
main() { perm(1); } 能解释一下全排语句for(j=k;j<=n;j++)
{t=a[k];a[k]=a[j];a[j]=t;</p><p>perm(k+1);</p><p>t=a[k];a[k]=a[j];a[j]=t;} 的意思吗??????????看不太懂唉!!!! 展开
2013-12-14
展开全部
这其实是一个递归
递归函数 意思是这样的
比如有n个数
1 2.。。。n
把1 从第一个开始 往后 与每个数开始交换
然后 第一个数就算定了 后面的 第2个到第n个当成一个整体
再进行这个函数递归
也就是说 第二个到第n个进行全排列
这样下去 当全排列到最后一组数 即第n个数一个的时候
递归退出条件就出来了 就可以输出全排列的值了
当然 最后别忘记把交换的数还原
再进行下一次交换 递归哦
所以最后一局的交换也是很重要的
听完我的解释 再好好琢磨一下
相信你一定会明白的 要是还是不懂可以继续追问我
递归函数 意思是这样的
比如有n个数
1 2.。。。n
把1 从第一个开始 往后 与每个数开始交换
然后 第一个数就算定了 后面的 第2个到第n个当成一个整体
再进行这个函数递归
也就是说 第二个到第n个进行全排列
这样下去 当全排列到最后一组数 即第n个数一个的时候
递归退出条件就出来了 就可以输出全排列的值了
当然 最后别忘记把交换的数还原
再进行下一次交换 递归哦
所以最后一局的交换也是很重要的
听完我的解释 再好好琢磨一下
相信你一定会明白的 要是还是不懂可以继续追问我
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询