用C语言区分旅客的国籍_第1页
用C语言区分旅客的国籍_第2页
用C语言区分旅客的国籍_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

用C语言区分旅客的国籍在一个旅馆中住着六个不同国籍的人,他们分别来自美国、德国、英国、法国、俄罗斯和意大利。他们的名字叫A、B、C、D、E和F。名字的顺序与上面的国籍不一定是相互对应的。现在已知:1)A美国人是医生。2)E和俄罗斯人是技师。3)C和德国人是技师。4)B和F曾经当过兵,而德国人从未参过军。5)法国人比A年龄大;意大利人比C年龄大。6)B同美国人下周要去西安旅行,而C同法国人下周要去杭州度假。试问由上述已知条件,A、B、C、D、E和F各是哪国人?*问题分析与算法设计首先进行题目分析,尽可能利用已知条件,确定谁不是哪国人。由:1)2)3)可知:A不是美国人,E不是俄罗斯人,C不是德国人。另外因为A与德国人的职业不同,E与美、德人的职业不同,C与美、俄人的职业不同,故A不是俄罗斯人或德国人,E不是美国人或德国人,C不是美国人或俄罗斯人。由4)和5)可知B和F不是德国人,A不是法国人,C不是意大利人。由6)可知B不是美国人,也不是法国人(因B与法国人下周的旅行地点不同);C不是法国人。将以上结果汇总可以得到下列条件矩阵:.美(医生)英法德(技师)意大利俄(教师)A(医生)X.XX.XBX.XX..C(技师)X.XXXXD......E(教师)X..X.XF...X..根据此表使用消元法进行求解,可以方便地得到问题的`答案。将条件矩阵输入计算机,用程序实现消去算法是很容易的。*程序说明与注释#includechar*m[7]={"","U.S","U.K","FRANCE","GER","ITALI","EUSSIAN"};/*国名*/intmain()inta[7][7],i,j,t,e,x,y;for(i=0;i<7;i++)/*初始化条件矩阵*/for(j=0;j<7;j++)/*行为人,列为国家,元素的值表示某人是该国人*/a[i][j]=j;for(i=1;i<7;i++)/*条件矩阵每一列的第0号元素作为该列数据处理的标记*/a[0][i]=1;/*标记该列尚未处理*/a[1][1]=a[2][1]=a[3][1]=a[5][1]=0;/*输入条件矩阵中的各种条件*/a[1][3]=a[2][3]=a[3][3]=0;/*0表示不是该国的人*/a[1][4]=a[2][4]=a[3][4]=a[5][4]=a[6][4]=0;a[3][5]=0;a[1][6]=a[3][6]=a[5][6]=0;while(a[0][1]+a[0][2]+a[0][3]+a[0][4]+a[0][5]+a[0][6]>0){/*当所有六列均处理完毕后退出循环*/for(i=1;i<7;i++)/*i:列坐标*/if(a[0][i])/*若该列尚未处理,则进行处理*/for(e=0,j=1;j<7;j++)/*j:行坐标e:该列中非0元素计数器*/if(a[j][i]){x=j;y=i;e++;}if(e==1)/*若该列只有一个元素为非零,则进行消去操作*/for(t=1;t<7;t++)if(t!=i)a[x][t]=0;/*将非零元素所在的行的其它元素置0*/a[0][y]=0;/*设置该列已处理完毕的标记*/for(i=1;i<7;i++)/*输出推理结果*/if(a[i][j]!=0){printf("%s.",m[a[i][j>);break;}*运行结果*问题的进一步讨论生成条件矩阵然后使用消去法进行推理判断是一种常用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论