预测排名问题

mengchenchen 2010-05-08 10:19:03
5位跳水高手参加10米高台跳水决赛,有好事者让5人据实力预测比赛结果。
A选手说:B第二,我第三。B选手说:我第二,E第四。
C选手说:我第一,D第二。D选手说:C最后,我第三。
E选手说:我第四,A第一。
决赛成绩公布之后,每位选手的预测都只对了一半,即一对一错。请编程解出比赛的实际名次。
...全文
259 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjs2010 2010-05-11
  • 打赏
  • 举报
回复
mark
invail 2010-05-11
  • 打赏
  • 举报
回复
mark
poiu710 2010-05-10
  • 打赏
  • 举报
回复
看不懂?那加点注释

// i^j,当i与j不同时返回1,就是异或运算。
// 5*5的循环,并保证 i~s 这 5 个数相互间两两不相同(第一
// 个if的条件里保证了这点),就可以得到 1~5 这 5 个数字的
// 任意顺序的排列,然后判断逐个判断排列是否使每一位选手的
// 说法都对一半,若是,那这个排列就是答案。
yel_hb 2010-05-09
  • 打赏
  • 举报
回复
发个类似的:

三位老师对某次数学竞赛进行了预测。他们的预测如下:
甲说:学生A得第一名,学生B得第三名。乙说:学生C得第一名,学生D得第四名。丙说:学生D得第二名,学生A得第三名。竞赛结果表明,他们都说对了一半,说错了一半,并且无并列名次,试编程输出A、B、C、D各自的名次。
算法设计:
1)用a,b,c,d 代表四个同学,其存储的值代表他们的名
次。
设置第一层计数循环a的范围从1到4;
设置第二层计数循环b的范围从1到4;
设置内计数循环c的范围从1到4;
由于无并列名次,名次的和为1+2+3+4=10,由此可计算
出d的名次值为10-a-b-c。
2)问题的已知内容,可以表示成以下几个条件式:
(1) (a==1)+(b==3)=1
(2) (c==1)+(d==4)=1
(3) (d==2)+(a==3)=1
若三个条件均满足,则输出结果,若不满足,继续循环
搜索,直至循环正常结束。

main( )
{int a,b,c,d;
for( a=1;a<=4;a++)
for( b=1;b<=4;b++)
if (a<>b)
for( c=1;c<=4;c++)
if (c<>a && c<>b)
{d=10-a-b-c;
if (d<>a && d<>b && d<>c )
if(((a==1)+(b==3))==1 && ((c==1)+(d==4))==1 && ((d==2)+(a==3))==1)
cout<< “a,b,c,d=”<<a<<b<<c<<d;
}
}



同理分析可以解决LZ的问题^^。
poiu710 2010-05-09
  • 打赏
  • 举报
回复
本人小菜,想不出什么好方法,只好暴力破解。

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

int main(int argc, char *argv[])
{
int a[5];
enum {A,B,C,D,E};
int i,j,k,r,s;

for (i=1; i<6; ++i)
{
for (j=1; j<6;++j)
{
for (k=1; k<6; ++k)
{
for (r=1; r<6;++r)
{
for (s=1;s<6; ++s)
{
if( i^j && i^k && i^r && i^s && j^k
&& j^r && j^s && k^r && k^s)
{
a[A]=i; // A
a[B]=j; // B
a[C]=k; // C
a[D]=r; // D
a[E]=s; // E
if ( (a[B]==2)^(a[A]==3) //A说:B=2; A=3;√
&&(a[B]==2)^(a[E]==4) //B说:B=2; E=4;√
&&(a[C]==1)^(a[D]==2) //C说:C=1; D=2;√
&&(a[C]==5)^(a[D]==3) //D说:C=5;√ D=3;
&&(a[E]==4)^(a[A]==1)) //E说:E=4;√ A=1;
{
for (int in=0; in<5; ++in)
{
cout << a[in] << ' ';
}
cout << endl;
}
}
}
}
}
}
}
return 0;
}


结果:3 1 5 2 4
mengchenchen 2010-05-09
  • 打赏
  • 举报
回复
真是很厉害哦,呵呵……谢啦……不过我看不懂啊……
z569362161 2010-05-09
  • 打赏
  • 举报
回复
这种问题做的太少,关注

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧