永发信息网

C语言全排列问题

答案:1  悬赏:60  手机版
解决时间 2021-04-16 23:11

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

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

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

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
csol的最高级别是多少级?
金港歌舞厅我想知道这个在什么地方
为什么我的AU会这样?
怎么用手机余额宝理财,手机怎么用余额宝
美肤宝的产品如何?
宠物狗生病了
曲靖市工商联(总商会)计算机网络商会这个地址
常见的屋面外排水系统
关于妈妈的名人名言,描写赞美母亲的名言
大哥们帮帮忙
甘蔗多少天施一次肥
开山是什么亲戚,我爷爷的亲兄弟的儿子和我爸
烽火战国资源爆仓系统会不会收走多余的资源?
请问要加强汽车的马力在不换配件的情况下,可
保尚元艾灸堂地址有知道的么?有点事想过去
推荐资讯
佛说一切皆有定数,何为定数?
淋巴结核怎么确诊,得了淋巴结核该注意什么
怎么更改QQ群里发的QQ表情上的文字,不要涂掉
烟的味道是什么?
09129期七星彩开奖号码是多少?
打钱到淘宝支付宝要钱么
什么叫身份证扫描件?
国雄饲料直销店我想知道这个在什么地方
Who is the man whom you said hello just no
你会想谁啊?
为什么我的问问积分-50分、等级0、问问经验-1
小学生表示有趣的句子,小学生必背古诗词75首
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?