求助C++编程? 本人正在学习C++,是个新手。有一个编程问题请教,求解答。
1、首先是将五个人的预测写成表达式:
让关系运算符 “==” 的含义是 “是”。
让数字 1、2、3、4、5 分别表示名次。
让整型变量 A、B、C、D、E 分别存放每个选手所得名次。
A选手说:B==2,A==3;
B选手说:B==2,E==4;
C选手说:C==1,E==2;
D选手说:C==5,D==3;
E选手说:E==4,A==1;
2、考虑到每个人说的话是一对一错,即一真一假,比如A说的(B==2)+(A==3)应该是 1。
1+0=1
0+1=1
所以可以得到以下表达式:
ta= ((B==2)+(A==3))==1;
tb= ((B==2)+(E==4))==1;
tc= ((C==1)+(D==2))==1;
td= ((C==5)+(D==3))==1;
te = ((E==4)+(A==1))==1;
ta+tb+tc+td+te==5
3、每个人的名次是不同并且都是属于{1,2,3,4,5},那么我们就可以得到以下表达式:
A+B+C+D+E=15
A*B*C*D*E=120
4、通过枚举,多重循环即可得到满足以上条件的A、B、C、D、E的值。
代码如下:
#include <iostream>
using namespace std;
int a,b,c,d,e;
void main()
{
for(a=1;a<=5;a++)
{
for(b=1;b<=5;b++)
{
for(c=1;c<=5;c++)
{
for(d=1;d<=5;d++)
{
for(e=1;e<=5;e++)
{
if((a+b+c+d+e)==15)
{
if ((a*b*c*d*e)==120)
{
if (((b==2||a==3)+(b==2||e==4)+(c==1||d==4)+(c==5||d==3)+(e==4||a==1))==5)
{
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
cout<<"d="<<d<<endl;
cout<<"e="<<e<<endl;
cout<<"---------------------------------------"<<endl;
}
}
}
}
}
}
}
}
}
A说: B A
B说: B E
C说: C D
D说; D C
E说: A E
插图比较麻烦,讲究着看。
他们说的都是一半对一半错,那么我们就用假设法。
1:假设A说的当中A第三是对的-->那么D说的D第三就错-->则D说的C第五就对-->则C说的C第一就错-->则C说的D第四就对,这样我们就确定了A-3,D-4,C-5.
另一边,A说A三对,-->则A说B是第二就错-->B说的B是第二就错-->B说的E是第四就对,而上面已经推出了D是第四,两者相矛盾,所以就是错了咯。
2:根据第一点推断的,知道A说的B是第二十正确的,就根据这样推就行了,结果是A B E D C.
当然,上面是我推出来了,所以直接先判的A说A第三是对,这样就可以排除这种可能,但在写代码的过程中就需要你分很多种的情况去分析,说白了,也就是不断的用if else if else....加上"||"和"&&"去做判断,所以要比较的细心点要考虑到全面的情况。代码就不写了,我也嫌麻烦。