问题描述
5名跳水高手参加 10 m 高台跳水决赛,有好事者让5人依据实力预测比赛结果。
A选手说:B第二,我第三。
B选手说:我第二,E第四。
C选手说:我第一,D第二。
D选手说:C最后,我第三。
E选手说:我第四,A第一。
决赛成绩公布后,每位选手的预测都只说对了一半,即一对一错。请编程解出比赛的实际名次。
代码实现
public class Test {
public static void main(String[] args) {
//定义五位选手
int a = 0;
int b = 0;
int c = 0;
int d = 0;
int e = 0;
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 (!((b == 2) == (a == 3)) &&
!((b == 2) == (e == 4)) &&
!((c == 1) == (d == 2)) &&
!((c == 5) == (d == 3)) &&
!((e == 4) == (a == 1))){
//结果判断,使结果唯一
if (a*b*c*d*e == 120){
System.out.println("A选手:" + a);
System.out.println("B选手:" + b);
System.out.println("C选手:" + c);
System.out.println("D选手:" + d);
System.out.println("E选手:" + e);
//获得结果后,结束程序,不在执行之后的for循环
return;
}
}
}
}
}
}
}
}
}