永发信息网

C语言全排列问题

答案:1  悬赏:60  手机版
解决时间 2021-04-16 23:11
  • 提问者网友:溺爱和你
  • 2021-04-16 00:49

问题:
四位数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;

perm(k+1);

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;

perm(k+1);

t=a[k];a[k]=a[j];a[j]=t;}

的意思吗??????????看不太懂唉!!!!

最佳答案
  • 五星知识达人网友:患得患失的劫
  • 2021-04-16 00:55
这其实是一个递归
递归函数 意思是这样的
比如有n个数
1 2.。。。n
把1 从第一个开始 往后 与每个数开始交换
然后 第一个数就算定了 后面的 第2个到第n个当成一个整体
再进行这个函数递归
也就是说 第二个到第n个进行全排列
这样下去 当全排列到最后一组数 即第n个数一个的时候
递归退出条件就出来了 就可以输出全排列的值了
当然 最后别忘记把交换的数还原
再进行下一次交换 递归哦
所以最后一局的交换也是很重要的
听完我的解释 再好好琢磨一下
相信你一定会明白的 要是还是不懂可以继续追问我

我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯