欢迎来到天天文库
浏览记录
ID:13642516
大小:67.50 KB
页数:8页
时间:2018-07-23
《应用全排序算法解决一道逻辑推理题》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、应用全排序算法解决一道逻辑推理题全排序算法就是列举一些字符的所有排列顺序的一种算法,比较典型的采用递归法。下面是一种简单的全排序算法。voidSwap(char*a,char*b){//交换a和b chartemp; temp=*a; *a=*b; *b=temp;}voidPerm(charlist[],intk,intm){//生成list[k:m]的所有排列方式 inti; if(k==m){//输出一个排列方式 for(i=0;i<=m;i++) putchar(list
2、[i]); putchar(''); } else//list[k:m]有多个排列方式 //递归地产生这些排列方式 for(i=k;i<=m;i++){ Swap(&list[k],&list[i]); Perm(list,k+1,m); Swap(&list[k],&list[i]); }}intmain(intargc,char*argv[]){ chars[6]="01234"; Perm(s,0,4); return0;}算法作者:拉格浪
3、日,来源:燕赵草叶风2006-7-1下面我简单地应用这个算法解决一道推理问题。该推理是这样的:一天晚上,一对已婚夫妇,和他们的儿子女儿在家里发生了一起谋杀案,凶手、帮凶、被害人和目击者分别是家里的人。情况如下:(1)目击者和那个帮凶不是同一性别(2)年龄最大的和目击者不是同一性别(3)年龄最轻的和被害人不是同一性别(4)帮凶比受害者大(5)父亲是年龄最长者(6)凶手不是家中最年轻的成员凶手、帮凶、被害人和目击者分别是谁?算法的基本思路是:定义两个数组,一个数组表示家庭成员,另一个数组表示他们可能扮演的角色。
4、当找出一种排列方式,然后一个数组对另一个数组赋值,如符合题目条件,则进行输出代码如下:#include#includestructPerson{charszName[20];boolSex;//true表示男,false表示女intage;//定义年龄};voidSwap(char*a,char*b){//交换a和bchartemp;temp=*a;*a=*b;*b=temp;}voidPerm(charlist[],PersonFamilys[],PersonC
5、haracters[],intk,intm){inti=0;if(k==m){for(i=0;i<=m;i++){Characters[i]=Familys[(list[i]-48)];}//假如符合题目条件if((Characters[1].Sex!=Characters[3].Sex)//目击者和那个帮凶不是同一性别&&(Familys[0].Sex!=Characters[3].Sex)//年龄最大的和目击者不是同一性别&&(Familys[3].Sex!=Characters[2].Sex)//年龄
6、最轻的和被害人不是同一性别&&(Characters[1].age>Characters[2].age)//帮凶比受害者大&&(Characters[0].age>20)//凶手不是家中最年轻的成员){cout<<"murderer:"<7、fbemurdered:"<8、ist[k],&list[i]);}}}intmain(intargc,char*argv[]){//定义一个家庭数组,Familys[0]为父亲,Familys[1]为母亲,Familys[2]为子女中年龄大的一个,Familys[3]为子女中年龄小的一个PersonFamilys[4];//初始化数组成员,strcpy(Familys[0].szName,"Father");Familys[0].Sex=tr
7、fbemurdered:"<8、ist[k],&list[i]);}}}intmain(intargc,char*argv[]){//定义一个家庭数组,Familys[0]为父亲,Familys[1]为母亲,Familys[2]为子女中年龄大的一个,Familys[3]为子女中年龄小的一个PersonFamilys[4];//初始化数组成员,strcpy(Familys[0].szName,"Father");Familys[0].Sex=tr
8、ist[k],&list[i]);}}}intmain(intargc,char*argv[]){//定义一个家庭数组,Familys[0]为父亲,Familys[1]为母亲,Familys[2]为子女中年龄大的一个,Familys[3]为子女中年龄小的一个PersonFamilys[4];//初始化数组成员,strcpy(Familys[0].szName,"Father");Familys[0].Sex=tr
此文档下载收益归作者所有