一共有5个红领巾,编号分别为A、B、C、D、E,老奶奶被他们其中一个扶过了马路。
五个红领巾各自说话:
A :我和E都没有扶老奶奶
B :老奶奶是被C和E其中一个扶过大街的
C :老奶奶是被我和D其中一个扶过大街的
D :B和C都没有扶老奶奶过街
E :我没有扶老奶奶
已知五个红领巾中有且只有2个人说的是真话,请问是谁扶这老奶奶过了街?
若有多个答案,在一行中输出,编号之间用空格隔开。
例如
A B C D E(这显然不是正确答案)
这道题的话,用全排列可以解决,因为题目有说,被一个人扶过了马路,也就是,假设了一人扶了,就可以确定其他人没有扶,那么我们就可以把可能的情况都排列出来,也就是{1,0,0,0,0}、{0,1,0,0,0}、{0,0,1,0,0}、{0,0,0,1,0}、{0,0,0,0,1};
接下来,用ABCDE五个变量来保存五个学生的真话状态,当能够符合两个人说真话的情况时,就把情况输出。
#include<iostream>
#include<algorithm>
using namespace std;
int main()
{
int n;
int A,B,C,D,E;//存放真话状态
int t;
int a[5]; //存放学生是否扶了老奶奶的状态,1扶了,0没扶
for(int i = 0x10;i > 0;i>>=1)
{
t = i;
for(int j = 4;j >= 0;j--)
{
a[j] = t & 1;
t >>= 1;
}
A = (a[0] + a[4] == 0);
B = (a[2] + a[4] == 1);
C = (a[2] + a[3] == 1);
D = (a[1] + a[2] == 0);
E = (a[4

这篇博客介绍了蓝桥杯算法问题,涉及到一个逻辑推理题目。五位红领巾A、B、C、D、E中只有两人说了真话,需要找出真正扶老奶奶过街的人。通过全排列方法分析每个红领巾可能的真话状态,最终找到符合条件的答案。
最低0.47元/天 解锁文章
3522





