求助C++编程? 本人正在学习C++,是个新手。有一个编程问题请教,求解答。

5位跳水选手参加跳水比赛。A说:''B第二,我第三。B说我第二,E第四。C说我第一,D第四。D说C最后我第三。E说我第四,A第一。最后每个人都说对了一半,用C++编程求出... 5位跳水选手参加跳水比赛。A说:''B第二,我第三。 B说 我第二,E第四。 C说 我第一,D第四。 D说 C最后 我第三。 E说 我第四,A第一。最后每个人都说对了一半,用C++编程求出结果。 求各位高手给个解答。最好给出你的编程思路,解释详细点。语句不要太复杂,本人新手 怕看不懂 。 展开
 我来答
百度网友54119c3
2011-09-28 · TA获得超过157个赞
知道小有建树答主
回答量:97
采纳率:0%
帮助的人:115万
展开全部

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;

}

}

}

}

}

}

}

}

}

原味三分甜咩
2011-09-28 · 超过28用户采纳过TA的回答
知道答主
回答量:83
采纳率:0%
帮助的人:41.3万
展开全部
1 2 3 4 5
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....加上"||"和"&&"去做判断,所以要比较的细心点要考虑到全面的情况。代码就不写了,我也嫌麻烦。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
刹那V永恒
2011-09-28
知道答主
回答量:28
采纳率:0%
帮助的人:18万
展开全部
建议做一下八皇后,和这个一个道理……我得关机了,明天晚上给你写程序
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cartergrady
2011-09-28
知道答主
回答量:7
采纳率:0%
帮助的人:9.5万
展开全部
穷举,然后分别判断每个人描述的是否是一个对一个错,如果全满足就可以输出结果。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
liming056
2011-10-04
知道答主
回答量:38
采纳率:0%
帮助的人:10.8万
展开全部
我会
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式