- 论坛徽章:
- 0
|
#define HOW_MANY 4
struct rob_say {
int who; // 哪位?
bool isrob; // 是不是强盗?
} robbuf[HOW_MANY] = {
{0, false}, {3, true}, {1, true}, {3, false}
}; // 0代表甲,1代表乙...
int main(void)
{
int i, j, k;
bool buf[HOW_MANY]; // 根据假设判定4个人中那些是强盗
int robs, rob;
for (i = 0; i < HOW_MANY; i++) {
for (j = 0; j < HOW_MANY; j++) {
buf[j] = false;
}
for (k = 0; k < HOW_MANY; k++) {
if (k == i) { // 假设i说的话是正确的
buf[robbuf[k].who] = robbuf[k].isrob;
continue;
}
// 其他人的话都是假的
buf[robbuf[k].who] = !robbuf[k].isrob;
}
robs = 0;
for (j = 0; j < HOW_MANY; j++) {
if (buf[j] == true) {
robs++; // 判定出有几个人是强盗
rob = j; // j是强盗
}
}
if (robs == 1) { // 如果只有一个是强盗,说明i说的是真话, 强盗就是rob(即:j)
printf("robber is %dth!\n", rob + 1);
break;
}
}
if (i == HOW_MANY) {
printf("unkown who is the robber!\n");
}
return 0;
}
[ 本帖最后由 UCfree 于 2008-6-27 22:35 编辑 ] |
|