“突然有一天,你忘记了今天是星期几,中国人凑吉利,所以你找来了八个人”程序设计


 台创软启动的优势在于核心理论,动手编程能力很差。这不,没办法,从基础学起。下面这个问题花了半天。终于调试通顺。

 

题目描述
突然有一天,你忘记了今天是星期几,中国人凑吉利,所以你找来了八个人,让他们每人说两句话,第一句为今天星期几,另一句为今天不是星期几,并且两句中一句真,一句假。可能第一句是真,也可能第二句是真。最后请你确定今天是星期几,并输出。

 

输入描述
8行,每行是两个星期几的阿拉伯数字表示,用空格分开

 

输出描述
一个数字,表示今天星期几。

程序如下:
 
#include
 
using namespace std;
 
 
 
int main()
 
{
 
   int i;
 
 
 
   int a1,a2,b1,b2,c1,c2,d1,d2,e1,e2,f1,f2,g1,g2,h1,h2;
 
         cin>>a1>>a2>>b1>>b2;
 
       
 
         cin>>c1>>c2;
 
         cin>>d1>>d2;
 
         cin>>e1>>e2;
 
         cin>>f1>>f2;
 
         cin>>g1>>g2;
 
         cin>>h1>>h2;
 
   for(i=1;i<=7;i++)
 
      {
 
         
 
        bool B1=(((i==a1)==1)&&((i!=a2)==0))||(((i==a1)==0)&&((i!=a2)==1));
 
              
 
        bool B2=(((i==b1)==1)&&((i!=b2)==0))||(((i==b1)==0)&&((i!=b2)==1));
 
            
 
        bool B3=(((i==c1)==1)&&((i!=c2)==0))||(((i==c1)==0)&&((i!=c2)==1));
 
              
 
        bool B4=(((i==d1)==1)&&((i!=d2)==0))||(((i==d1)==0)&&((i!=d2)==1));
 
              
 
        bool B5=(((i==e1)==1)&&((i!=e2)==0))||(((i==e1)==0)&&((i!=e2)==1));               
 
        bool B6=(((i==f1)==1)&&((i!=f2)==0))||(((i==f1)==0)&&((i!=f2)==1));
 
              
 
        bool B7=(((i==g1)==1)&&((i!=g2)==0))||(((i==g1)==0)&&((i!=g2)==1));
 
               
 
        bool B8=(((i==h1)==1)&&((i!=h2)==0))||(((i==h1)==0)&&((i!=h2)==1));
 
             
 
         if(B1&&B2&&B3&&B4&&B5&&B6&&B7&&B8)
 
           {
 
             cout<<i<<endl;
 
             break;
 
            }
 
 
 
       }
 
   return 0;
 
 
 
}
 
难点分析:
 
两句中一句真,一句假。可能第一句是真,也可能第二句是真。
 
这种逻辑表达式为两句话有且仅有一句话为真。可表示如下:
 
 bool B1=(((i==a1)==1)&&((i!=a2)==0))||(((i==a1)==0)&&((i!=a2)==1));
 
i==a1判断了这句话是否真假。 真要判断这句话是真 必有 (i==a1)==1. 
 
(((i==a1)==1)&&((i!=a2)==0))这句话的每一个( )都必须标对。台创软启动弄错了几次。
 
还一个 为啥为bool B1 ,开始笔者习惯为bool b1 弄了半天,与前面输入相冲突。
 
既要想清楚,还要一个一个细节的表达出来。真是和装修房子一样,刷了乳胶漆之后,还要把细节整巴适才得行。这就叫做计算思维。可是06年美国华裔才提出来的前沿概念啊。
 
台创软启动不怕丢丑。公开出来,你有没有更好的办法,欢迎拍砖!
 
 
 
免费试用交大台创软启动啦!
 
 扫描二维码,关注荣军波---交大台创软启动的最新电力电子产品研发动态