網路有一個求四大湖排名的問題如下:
我国有4大淡水湖。
A说:洞庭湖最大,洪泽湖最小,鄱阳湖第三。
B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三。
C说:洪泽湖最小,洞庭湖第三。
D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三。
已知这4个湖的大小均不相等,4个人每人仅答对一个,
请编程按照鄱阳湖、洞庭湖、太湖、洪泽湖的顺序给出他们的大小排名。
我參考了網上的方法寫了如下的程式:
#include <iostream>
using namespace std;
int main(void){
int dt=0,hz=0,by=0,th=0;
int a=0,b=0,c=0,d=0;
//bool a=0,b=0,c=0,d=0;換成bool型態
for(dt=1;dt<=4;dt++){
for(hz=1;hz<=4;hz++){
for(by=1;by<=4;by++){
for(th=1;th<=4;th++)
{
//if((dt==by)||(dt==hz)||(dt==th)||(by==hz)||(by==th)||(hz==th)) continue;
a=((dt==1)+(hz==4)+(by==3));
b=((hz==1)+(dt==4)+(by==2)+(th==3));
c=((hz==4)+(dt==3));
d=((by==1)+(th==4)+(hz==2)+(dt==3));
if((a*b*c*d==1)&&(dt!=by)&&(dt!=th)&&(dt!=hz)&&(by!=hz)&&(by!=th)&&(hz!=th)) {
cout<<"DT is "<<dt<<" and BY is "<<by<<" and TH is "<<th<<" and HZ is "<<hz<<endl;
}
}
}
}
}
return 0;
}
以上的方法確實可以得出一組解答,但怪的是,如果我把紅字的部份變成 bool 型態,則以上的方法會得出二組答案?為何會如此?
|