// 主程序
/*
数组: a[1]~a[5]表示a,b,c,d,e的当前人对别人作出的判断,
b[1]~b[5]表示当前人判断完所能推出的状态
values[1]~values[5]分别为a,b,c,d,e所描述的白的个数
用1,0分别表示白,黑,即a[1]=1,白,b[1]=1,白
从A到D挨个判断,计4轮,每次依据自己的描述判断别人的状态a[],再推断其前面的人b[]的状态,修改自己的状态
*/
#include
#include
void main() {
unsigned char j;
for(j=1;j<=4;j++){
judge(j);
}
}
void judge(unsigned char num){
unsigned char i;
white_number=0;
for(i=1;i<=4;i++){ // 先不考虑 e
if((values[i]==values[num])&&(b[i]==1)&&(values[i]>=1)) {a[i]=1;} // 与当前描述相符视为"白"
if((values[i]==values[num])&&(b[i]==0)) {b[num]=0;} // 与已经定为"黑"的描述同,则直接认定为"黑"
else if((values[i]==1)&&(values[num]==0)){a[i]=0;b[num]=0;} // 矛盾描述时直接认定为"黑"
else {a[i]=0;}
white_number=white_number+a[i];
}
white_number=white_number-a[num];
if(white_number==values[num]) {} // 暂定为白不考虑e
else if((white_number==1)&&(values[num]==0)) {b[5]=1;} // 单独考虑e
else {b[num]=0;}
print(num); &