编写一个C语言程序 实现自我介绍,用c语言编程实现,别出心裁的情侣拍照

满意答案

/*************************************************************************************************************************

通过编写这个程序领悟到的几点:

1、编写程序不要急于着手写代码,必须先把算法设计出来,考虑清楚所有情况,在算法上先做到无懈可击才能编出完美的没有错误的代码。

2、子函数及其递归调用相当重要,如果没有子函数及其递归调用,本来一个很简单的程序将会变得复杂无序。

3、加深了对全局变量和局部变量的理解。

4、必须保证程序已经考虑到所有的情况,不能因为得到了结果就停止优化。这样会导致不可预料的bug,会对后期维护造成很大的难度。

5、注释是十分必要的,它极大地增强了代码的可读性,对程序的维护和修改有极大的帮助作用。

编写者:michelle

Q Q:824607076

日期:13.10.22

************************************************************************************************************************/

#include

int a[4][2];//情侣数组用来存放情侣序号例如a[0][0]表示第一对情侣的男孩

int b[8];//位置数组,八个按顺序排列的位置,如b[0]表示第一个位置,b[0]=0表位置没有被占,1表示被占

int num=0;//找到的可能结果总数

//第i对情侣男孩从第p位开始坐的排列

void arrange(int i ,int p)

{

int j;

int m;

int n;

int q;

for(j=p;j<8;j++)

{

//有适合的位置

if((i+j+2<8)&&(0==b[j])&&(0==b[i+j+2]))

{

a[i][0]=j;//男孩获得座位序号

b[j]=1;//男孩坐上座位

a[i][1]=i+j+2;//女孩获得座位序号

b[i+j+2]=1; //女孩坐上座位

if(3!=i)//如果不是最后一对情侣就让下一对情侣找座位

{

arrange(i+1,0);

}

else//如果是最后一对情侣,公布结果,并寻找下一种可能性

{

//公布结果

num++;//结果个数加1

for(m=0;m<4;m++)

for(n=0;n<2;n++)

{

printf("%d",a[m][n]+1);

}

printf("\n");

//寻找下一种可能性

b[a[i-1][0]]=0;//前一对情侣男孩离开座位

b[a[i-1][1]]=0;//前一对情侣女孩离开座位

q=a[i-1][0];//获得前一对情侣男孩上一次的座位号

a[i-1][0]=0;//前一对情侣男孩上交座位序号

a[i-1][0]=0;//前一对情侣女孩上交座位序号

arrange(i-1,q+1);//上一对情侣接着上次找的位置往下找座位

}

break;//这一对情侣停止找座位

}

}

//没有找到座位

if(8==j)

{

//如果是第一对情侣已经找不到座位,公布可能结果个数,结束找座位,准备照相

if(0==i)

{

printf("共找到的结果个数为%d\n",num);

// *********程序结束于这里**********

}

//如果不是第一对情侣已经找不到座位,让上一对情侣重新找座位

else

{

b[a[i-1][0]]=0;//前一对情侣男孩离开座位

b[a[i-1][1]]=0;//前一对情侣女孩离开座位

q=a[i-1][0];//获得前一对情侣男孩上一次的座位号

a[i-1][0]=0;//前一对情侣男孩上交座位序号

a[i-1][0]=0;//前一对情侣女孩上交座位序号

arrange(i-1,q+1);//上一对情侣接着上次找的位置往下找座位

}

}

}

//主函数 **********程序开始于这里************

main()

{

printf("各对情侣男女的位置编号分别为(情侣内部男女可互换,默认男士在前):\n");

arrange(0,0);

}

00分享举报

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值