夏日炎炎,空调机走俏。5家空调机厂的产品在一次质量评比活动中分获前5名。评比前大家就已知E的产品肯定不是第2名和第3名。
A的代表猜测:E的产品一定获第1名。
B的代表猜测:我可能获第2名。
C的代表猜测:A的质量最差。
D的代表猜测:C的产品不是最好的。
E的代表猜测:D厂会获第1名。
评比结果公布以后发现,只有获第1名和第2名的两个厂的代表猜对了。
请编程给出A,B,C,D,E各是第几名?
思路:
如果E是第一名,那E说的就是对的,则D也是第一名,矛盾
所以E只能是第四或者第五,即E说的是错的
那么A也是错的……
我们还可以建立一个索引数组。
第一名是a[1]……第五名是a[5]
用1,2,3,4,5分别表示abcde
即a[1]=5表示第一名是e(打个比方)
#include<iostream>
using namespace std;
int main() {bool cc[6];int a[6] = { 0 };for (a[1] = 1; a[1] < 6; a[1]++)for (a[2] = 1; a[2] < 6; a[2]++)for (a[3] = 1; a[3] < 6; a[3]++)for (a[4] = 1; a[4] < 6; a[4]++)for (a[5] = 1; a[5] < 6; a[5]++)if ((a[1] * a[2] * a[3] * a[4] * a[5] == 120)&&(a[2]!=5)&&(a[3]!=5)) {cc[1] = (a[1] == 5);cc[2] = (a[2] == 2);cc[3] = (a[5] == 1);cc[4] = (a[1] != 3);cc[5] = (a[1] == 4);if ((cc[a[1]]) && (cc[a[2]]) && (!cc[a[3]]) && (!cc[a[4]]) && (!cc[a[5]])) {for (int i = 1; i < 6; i++)cout << (char)(a[i] + 'A' - 1) << "荣获第" << i << "名"<<endl;}}return 0;}
输出如下: