一道C语言趣味小题

来源:百度知道 编辑:UC知道 时间:2024/05/15 09:19:26
我们班级有4位同学中的一位做了好事,不留名,表扬信来了之后,老师想知道4位中谁做了好事。
A说:不是我
B说:是C
C说:是D
D说:C在说谎
已知3人说真换,一人说假话,请用C语言编程是谁做了好事。(可用单循环或重循环完成)

#include<stdio.h>

typedef struct GOODTHINGS
{
int trueIndex; //做好事的号码 -1 代表没有指示谁做了好事
int falseIndex; //没做好事的号码 -1代表没有指示谁没做好事
GOODTHINGS()
{
trueIndex = -1;
falseIndex = -1;
}
} GoodThings, *pGoodThings;

bool isOK(const pGoodThings pA, int nSizeofA);

void main()
{
GoodThings a[4];
GoodThings temp;
a[0].falseIndex = 0; //A指示自己没做好事
a[1].trueIndex = 2; //B说是C
a[2].trueIndex = 3; //C说是D
a[3].falseIndex = 3; //D说C说谎,即D指示自己没做好事

int trueCount = 0;

for(int i = 0; i < 4; i++)
{
temp.falseIndex = a[i].falseIndex;
temp.trueIndex = a[i].trueIndex;

if(i == 0 || i == 3)
{
a[i].trueIndex = i; //a[i] tell lies
a[i].falseIndex = -1;
}
else
{
a[i].falseIndex = a[i].trueIndex;
a[i].trueIndex = -1; //a[i] tell lies
}

if(isOK