大神快来啊,C或C++ 10
1.问题描述(来个逻辑题)一共有5个红领巾,编号分别为A、B、C、D、E,老奶奶被他们其中一个扶过了马路。五个红领巾各自说话:A:我和E都没有扶老奶奶B:老奶奶是被C和E...
1. 问题描述(来个逻辑题)
一共有5个红领巾,编号分别为A、B、C、D、E,老奶奶被他们其中一个扶过了马路。
五个红领巾各自说话:
A :我和E都没有扶老奶奶
B :老奶奶是被C和E其中一个扶过大街的
C :老奶奶是被我和D其中一个扶过大街的
D :B和C都没有扶老奶奶过街
E :我没有扶老奶奶
已知五个红领巾中有且只有2个人说的是真话,请问是谁扶这老奶奶过了街?
若有多个答案,在一行中输出,编号之间用空格隔开。
答案应为:(10分) 展开
一共有5个红领巾,编号分别为A、B、C、D、E,老奶奶被他们其中一个扶过了马路。
五个红领巾各自说话:
A :我和E都没有扶老奶奶
B :老奶奶是被C和E其中一个扶过大街的
C :老奶奶是被我和D其中一个扶过大街的
D :B和C都没有扶老奶奶过街
E :我没有扶老奶奶
已知五个红领巾中有且只有2个人说的是真话,请问是谁扶这老奶奶过了街?
若有多个答案,在一行中输出,编号之间用空格隔开。
答案应为:(10分) 展开
3个回答
展开全部
假定X扶了,再根据他们说得,判断一下就出来了。
1.假如A扶了,则 A:X, B:X, C:X, D :对, E:对,符合
2.假如B扶了,则 A:对, B:X, C:X, D:X, E:对,符合
3.假如C扶了,则 A:对, B:对,C:对,D:X, E:对,不符合
4.假如D扶了,则 A:对, B:X, C:对,D:对, E:对,不符合
5.假如E扶了,则 A:X, B:对,C:X, D:对, E:X, 符合
所以是A, B, E扶了。三个答案
===========================================
忘记了,用编程实现。过一会。
===========================================
#include <stdio.h>
#include <string.h>
/*
1. 问题描述(来个逻辑题)
一共有5个红领巾,编号分别为A、B、C、D、E,老奶奶被他们其中一个扶过了马路。
五个红领巾各自说话:
A :我和E都没有扶老奶奶
B :老奶奶是被C和E其中一个扶过大街的
C :老奶奶是被我和D其中一个扶过大街的
D :B和C都没有扶老奶奶过街
E :我没有扶老奶奶
已知五个红领巾中有且只有2个人说的是真话,请问是谁扶这老奶奶过了街?
若有多个答案,在一行中输出,编号之间用空格隔开。
*/
/**
0 - N
1 - Y, (one of them)
2 - not sure
*/
char say[5][5] = {
0, 2, 2, 2, 0,
2, 2, 1, 2, 1,
2, 2, 1, 1, 2,
2, 0, 0, 2, 2,
2, 2, 2, 2, 0
};
char right[5] = {0,0,0,0,0}; //假定第i个人说的是真话,则第i个数据改为1 (从0数)
int main() {
int i,j, k;
int yn;
for (i=0;i<5;i++) {
yn = 0;
memset(right, 0, 5);
right[i] = 1;
for (j=0;j<5;j++) {
if (say[j][i]!=right[i] && say[j][i]!=2)
yn ++; //假话
else {
for (k=0;k<5;k++) {
if (say[j][k]==1 && say[j][i]!=1) {
yn++; //假话
break;
}
}
}
}
if (yn==3) //3个假话,则2个真话
printf("%c ", (0x41+i));
}
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询