台创软启动的优势在于核心理论,动手编程能力很差。这不,没办法,从基础学起。下面这个问题花了半天。终于调试通顺。
题目描述
突然有一天,你忘记了今天是星期几,中国人凑吉利,所以你找来了八个人,让他们每人说两句话,第一句为今天星期几,另一句为今天不是星期几,并且两句中一句真,一句假。可能第一句是真,也可能第二句是真。最后请你确定今天是星期几,并输出。
输入描述
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年美国华裔才提出来的前沿概念啊。
台创软启动不怕丢丑。公开出来,你有没有更好的办法,欢迎拍砖!
免费试用交大台创软启动啦!
扫描二维码,关注荣军波---交大台创软启动的最新电力电子产品研发动态