给你个思路吧
假设 洪泽湖为 H,洞庭湖为D,鄱阳湖 P。太湖T。
那么,把HDPT 四个字母的所有排列 枚举出来放到一个字符串内,比如order,然后对ABCD 四人的判断进行检查
比如检查a,返回答对的次数
int CheckA(char order[4])
{
// A说:洞庭湖最大,洪泽最小。鄱阳湖第三。
int result = 0;
if (order[0] == 'D') { // 洞庭湖最大
result++;
}
if (order[3] == 'H') { //洪泽最小
result++;
}
if (order[2] == 'P') { //鄱阳湖第三
result++;
}
return result;
}
同理
int CheckB(char order[4])
{
//B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二。太湖第三。
int result = 0;
if (order[0] == 'H') result++;
if (order[3] == 'D') result++;
if (order[1] == 'P') result++;
if (order[2] == 'T') result++;
return result;
}
int CheckC(char order[4])
{
//C说:洪泽湖最小,洞庭湖第三。
int result = 0;
if (order[3] == 'H') result++;
if (order[2] == 'D') result++;
return result;
}
int CheckD(char order[4])
{
//D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
int result = 0;
if (order[0] == 'P') result++;
if (order[3] == 'T') result++;
if (order[1] == 'H') result++;
if (order[2] == 'D') result++;
return result;
}
然后,由于每个人都是答对一个,所以只有check abcd 都是返回1 的答案才是正确的
所以
bool CheckOrder(char order[4])
{
if ((CheckA(order) == 1) &&
(CheckB(order) == 1) &&
(CheckC(order) == 1) &&
(CheckD(order) == 1) ) {
// 这个就是正确的顺序了
return true;
}
return false;
}
void main()
{
char order[4] = {0};
for ('H'、'D'、'P'、'T' 四个字母进行排列组合,组合到order) {
if (CheckOrder(order)) {
// 这个地方就是正确的顺序了
printf("正确顺序:%c、%c、%c、%c.", order[0],order[1],order[2],order[3],);
}
}
}
至于把HDPT 四个字母的所有组合枚举的算法,你自己写吧,这个难度不大了
[
本帖最后由 yuccn 于 2013-12-7 09:31 编辑 ]