习题4.4 给出4个湖从大到小的顺序
我国有4大淡水湖。
A说:洞庭湖最大,洪泽湖最小,鄱阳湖第三。
B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三。
C说:洪泽湖最小,洞庭湖第三。
D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
4个人每个人仅答对了一个,请编程给出4个湖从大到小的顺序。
//************************************************
//* Source Name: ChapterFour_ExerciseThree.cpp
//* Founction : The ranking of the four major freshwater lakes
//* Author : Skyera
//* Create Time : 2025-7-19
//* Modify :
//* Modify Time:
//************************************************
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>using namespace std;struct Lake{string name;int rank;
};// 检查排列是否满足条件
bool checkRanking(const vector<Lake>& lakes){// 找到各湖的排名int dongting=-1, hongze=-1, poyang=-1, taihu=-1;for(const auto& lake:lakes){if(lake.name=="洞庭湖") dongting = lake.rank;if(lake.name=="洪泽湖") hongze = lake.rank;if(lake.name=="鄱阳湖") poyang = lake.rank;if(lake.name=="太湖") taihu = lake.rank; }// 统计每个人答对的数量int correctA=0, correctB=0, correctC=0, correctD=0;// A的陈述:洞庭湖最大,洪泽湖最小,鄱阳湖第三if(dongting==1) correctA++;if(hongze==4) correctA++;if(poyang==3) correctA++;if(correctA!=1) return false;// B的陈述:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三if(hongze==1) correctB++;if(dongting==4) correctB++;if(poyang==2) correctB++;if(taihu==3) correctB++;if(correctB!=1) return false;// C的陈述:洪泽湖最小,洞庭湖第三if(hongze==4) correctC++;if(dongting==3) correctC++;if(correctC!=1) return false;// D的陈述:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三if(poyang==1) correctD++;if(taihu==4) correctD++;if(hongze==2) correctD++;if(dongting==3) correctD++;if(correctD!=1) return false;return true;
}int main()
{// 初始化四个湖vector<Lake> lakes ={{"洞庭湖",1},{"洪泽湖",2},{"鄱阳湖",3},{"太湖",4}};// 生成所有排列并检查do{if(checkRanking(lakes)){// 输出结果cout << "四大淡水湖从大到小的顺序: "<< endl;for(const auto& lake:lakes){cout << lake.rank << " . " << lake.name << endl;}return 0;}}while(next_permutation(lakes.begin(), lakes.end(), [](const Lake& a, const Lake& b){return a.rank < b.rank;}));cout << "未找到符合顺序的排列" << endl;return 1;
}