用C语言编程,输出1,2,3,4在两行两列表格的各种排列,请利用二重循环寻找填法 10

 我来答
百度网友fd6aeb57a
2011-01-11 · TA获得超过1539个赞
知道小有建树答主
回答量:382
采纳率:0%
帮助的人:289万
展开全部
这个问题和两行两列没多大关系,主要就是求P4的全排列(共24种)。
然后在输出的时候考虑一下格式就可以了。
下面讲一下具体方法(回溯法)。
用data[4]来表示表格数据,used[5]记录某个数据是否已经被填过了。
两重循环:外层循环(i)从0到3不断地来来回回指定被填数data[i];内层循环试着从小到大不断的尝试填写data[i]。

下面是源代码,有注释的,就耐着性子慢慢看慢慢研究吧。
#include <stdio.h>
int main(void){
int i;
int data[4],used[5]={0},cas=1;

//循环的初始化
i=0;
data[0]=0;

while(1){
//data[i]从1到4枚举每一种情况。
do{
data[i]++;
}while(data[i]<=4 && used[data[i]]);

if(data[i]<=4){//data[i]填好了
if(i==3){
//所有数据都填写好了,输出
printf("CASE: %d\n",cas++);
printf("%d %d\n%d %d\n",data[0],data[1],data[2],data[3]);
used[data[--i]]=0;//清理used[],并把i减1
}
else{
//并非所有数据都填写好
used[data[i]]=1;//data[i]这个数据已经用过,记录一下。
data[++i]=0;//准备开始试填下一个了。
}
}
else{//data[i..3]枚举完了,考虑i-1的情况。
if(i==0) break;
used[data[--i]]=0;//清理used[],并把i减1
}
}
return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式