上地理课时,四个学生回答我国四大淡水湖的大小时说:
甲:洞庭湖最大,洪泽湖最小,鄱阳湖第三。
乙:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三
丙:洪泽湖最小,洞庭湖第三。
丁:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
对于每个湖的大小,每人仅答对了一个。请判断四个湖的大小。
请编写程序实现。
思路:分别假设洞庭湖、洪泽湖、鄱阳湖、太湖的大小为A、B、C或D,对其进行全排列,筛选出符合条件的组合
#include<iostream>
#include<string>
using namespace std;
void perm(string s,int n,int i) {
if(i==n-1) {
if(((s[0]=='A')+(s[1]=='D')+(s[2]=='C')==1)&&
((s[1]=='A')+(s[0]=='D')+(s[2]=='B')+(s[3]=='C')==1)&&
((s[1]=='D')+(s[0]=='C')==1)&&
((s[2]=='A')+(s[3]=='D')+(s[1]=='B')+(s[0]=='C')==1)) {
cout<<s<<endl;
}
return;
}
for(int j=i;j<n;j++) {
swap(s[j],s[i]);
perm(s,n,i+1);
swap(s[j],s[i]);
}
}
int main() {
string s = "ABCD";
perm(s,4,0);
return 0;
}