一聚教程网:一个值得你收藏的教程网站

热门教程

加注解的纸条问题新写的程序推敲

时间:2022-07-02 11:02:49 编辑:袖梨 来源:一聚教程网


// 主程序
/*
数组: 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);                                             &