在一次竞赛中,
A
、
B
、
C
、
D
、
E
等五人经过激烈的角逐,最终取得了各自的名次,他们的一个好朋友很遗憾没有观看到比赛,在比赛结束后这个朋友询问他们之间的名次是得知:
1、C
不是第一名
2、D
比
E
低二个名次,而
E
不是第二名
3、
A 即不是第一名,也不是最后一名
4、B
比
C
低一个名次
编写程序,计算这五个人各自的名次并输出。
#include <iostream>
using namespace std;
//判断名次有无相等情况
bool judgeEqual(int num[],int len) {
for (int i = 0; i < len-1; i++) {
for (int j = i + 1; j < len; j++) {
if(num[i]==num[j])return false;
}
}
return true;
}
int main() {
int n = 0;
//定义一个五人数组,分别代表A、B、C、D、E五个人的名次,初始化都是0
int num[5] = {0};
//第一层for代表A的名次,根据A的条件,不可能是1和5
for (int a = 2; a < 5; a++) {
//第二层for是C的名次,因为想知道B,必须先选出C,知道C的名次就可以直接+1得出B
for (int c = 2; c < 5; c++) {
//第三层是E的名次,因为想知道D,必须先选出E,知道E直接+2就可以直接得出D
for (int e = 1; e < 4; e++) {
if (e == 2)continue;
num[0] = a;
num[1] = c + 1;
num[2] = c;
num[3] = e + 2;
num[4] = e;
//用一个函数判断数组里面是否有相等元素,有直接退出
if (judgeEqual(num, 5)) {
a = 5;
c = 5;
e = 5;
}
}
}
}
for (int i = 0; i < 5; i++) {
char le = 'A' + i;
cout <<le<<":"<< num[i] << " ";
}
return 0;
}