中易网

C 1-9全排列 解释

答案:2  悬赏:50  
解决时间 2021-03-13 16:57
#include

int n = 0;

void swap(int *a, int *b)
{
int m;
m = *a;
*a = *b;
*b = m;
}
void perm(int list[], int k, int m)
{
int i;
if(k > m)
{
for(i = 0; i <= m; i++)
printf("%d ", list[i]);
printf("\n");
n++;
}
else
{
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
perm(list, k + 1, m);
swap(&list[k], &list[i]);
}
}
}
int main()
{
int list[] = {1, 2, 3, 4, 5,6,7,8,9};
perm(list, 0, 8);
printf("total:%d\n", n);
return 0;
}

帮忙解释一下
for(i = k; i <= m; i++)
{
swap(&list[k], &list[i]);
perm(list, k + 1, m);
swap(&list[k], &list[i]);
}
如果 i = k 那么 swap(&list[k], &list[i]); 互换没有意义啊
新手求解释 谢谢
最佳答案
当i=k的时候,互换是没有意思,因为换来换去都一样,但是,这样写,保证了程序的一致性,不用再写一个分支处理这种情况。
代码从整体上看也比较简洁。
如果分开写,也没有问题。
全部回答
#include <stdlib.h> #include <stdio.h>    这里两个是头文件 里面包含了几个函数 应该就是其他编程工具里面的支持库吧。个人是这样理解的  main() 这个是主函数 {         int i;   定义一个整形变量i     for(i=0;i<10;i++)    给 i  赋初值为0 然后i++就等于 i=i+1   i<10 这里是 当i<10成立时才执行以下代码 否则跳出循环     {     printf("%d\n",i); 打印 i     }          system("pause");  这个函数是暂停屏幕的 如果没有会一闪而过     }
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
瞒著爹海派中式名点在哪里啊,我有事要去这个
移动sim卡已装有福建农村信社手机银行星片,
js或者jquery一个点击改变多个数组型值改变
酷比魔方iwork8发热严重吗
一个小数,如果把它的小数点向右移动一位,就
以给自己是的一封信初中学生励志800字左右
找几本无限流或末日类的小说,男主要正直点的
请问折现率和利率有什么区别啊
一个数扩大10倍,那应该是原数乘10还是原数乘
华为手机怎么拍摄跳起来的照片
老伍水果大卖场在什么地方啊,我要过去处理事
您好,我想问一下,青岛市政设计院怎么样?我
当事人不知道自己肇事,而离开现场,请问这种
求生之路2是不是安装完steam就能玩了,还有升
姜怎么去辣味,老姜怎么去除它的辣味!
推荐资讯
安全气囊撞出后可恢复正常吗?
乘船的作文400字
脑损伤会造成什么后果
八字排出,怎样看家庭
梦见一女人给我和男明星牵线
2008年华晨宝马523li配什么牌轮胎
买狗的话去什么网站可以买到好狗?
福州的高一数学教科书类型到底是人教版A还是
外地人口在锦江区办居住政
想系统的学习excel,麻烦推荐几个excel的视频
山东艺术生明天应该怎么填报志愿,是报本科一
国内的陌陌可以在新加坡登吗
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?