本文共 2292 字,大约阅读时间需要 7 分钟。
三对情侣参加婚礼,三个新郎为 A、B、C,三个新娘为 X 、Y、Z。有人不知道谁和谁结婚,于是询问了六位新人中的三位,但听到的回答是这样的 :A 说他将和 X 结婚 ;X 说她的未婚夫是C ;C 说他将和 Z 结婚。这人听后知道他们在开玩笑,全是假话 。请编程找出谁将和谁结婚 。
。。。此题我用了邻接矩阵,根据题目给出的关系给邻接矩阵赋了初值。。虽然算出来了,但是写的贼麻烦。。。
这里我把我的代码和网上给出的答案都列在下面了。。。
注释我都列出来了...
我写的:
#include#include #include #include using namespace std;int vis[3][3]; //1代表两人为伴侣,2表示两人关系不确定,0表示两人不是伴侣void init() //初始化关系不确定{ for (int i=0;i<3;i++) for (int j=0;j<3;j++) vis[i][j]=2;}void output () //输出结果{ char s1[5]="XYZ"; char s2[5]="ABC"; int re[3]; for (int i=0;i<3;i++) for (int j=0;j<3;j++) if(vis[i][j]==1) re[i]=j; for (int i=0;i<3;i++) printf("%c的未婚夫为%c\n",s1[i],s2[re[i]]);}int main(){ int num=0; //表示确定关系的对数 init(); //题目给出的条件 vis[0][0]=0; vis[0][2]=0; vis[2][2]=0; while (num<3) { for (int i=0;i<3;i++) { //当一个人与两个人确定不是情侣关系时,可断定与另一个人是情侣 if(!vis[i][0]&&!vis[i][1]&&vis[i][2]==2) { num++; vis[i][2]=1; for (int j=0;j<3;j++) if(j!=i) vis[j][2]=0; continue; } if(!vis[i][0]&&vis[i][1]==2&&!vis[i][2]) { num++; vis[i][1]=1; for (int j=0;j<3;j++) if(j!=i) vis[j][1]=0; continue; } if(vis[i][0]==2&&!vis[i][1]&&!vis[i][2]) { num++; vis[i][0]=1; for (int j=0;j<3;j++) if(j!=i) vis[j][0]=0; continue; } } } output();}
网上给出的:
#includeint main(){ int x, y, z; for (x = 1; x <= 3; x++) { for (y = 1; y <= 3; y++) { for (z = 1; z<= 3; z++) { if (x != 1 && x != 3 && z != 3 && x != y && y != z && x != z) { printf("X will marry to %c.\n", 'A' + x - 1); printf("Y will marry to %c.\n", 'A' + y - 1); printf("Z will marry to %c.\n", 'A' + z - 1); } } } } return 0;}
转载地址:http://hvaen.baihongyu.com/