下面兩道題通過枚舉處理邏輯判斷問題。有一定的相似性,因此寫在一篇博文中。
2:四大湖
總時間限制:1000ms 內存限制:65536kB
描述
我國有4大淡水湖。
A說:洞庭湖最大,洪澤湖最小,鄱陽湖第三。
B說:洪澤湖最大,洞庭湖最小,鄱陽湖第二,太湖第三。
C說:洪澤湖最小,洞庭湖第三。
D說:鄱陽湖最大,太湖最小,洪澤湖第二,洞庭湖第三。
已知這4個湖的大小均不相等,4個人每人僅答對一個,
請編程按照鄱陽湖、洞庭湖、太湖、洪澤湖的順序給出他們的大小排名。
輸入
無。
輸出
輸出爲4行,第1行爲鄱陽湖的大小名次,從大到小名次分別表示爲1、2、3、4;第2、3、4行分別爲洞庭湖、太湖、洪澤湖的大小名次。
樣例輸入
(無)
樣例輸出
3
2
1
4
提示
樣例輸出僅供格式參考
代碼
#include<iostream>
using namespace std;
int main()
{
int x,y,z,m;//分別記錄鄱陽湖,洞庭湖,太湖,洪澤湖的排名
bool a,b,c,d;//分別表示四個人的判斷,因爲每個人只判斷對一個,因此用布爾類型來記錄判斷對的那一個
for(x=1;x<=4;x++)
{
for(y=1;y<=4;y++)
{
if(x!=y)//題目要求四個湖的大小不同,因此排名都不一樣
{
for(z=1;z<=4;z++)
{
if(z!=x&&z!=y)
{
m=10-x-y-z; //排名1+2+3+4=10
a=(x==3)+(y==1)+(z==2)+(m==4); //分別表示每個人的推斷,但是,每個推斷中只有一個是對的,四個人有四個是對的
b=(x==2)+(y==4)+(z==3)+(m==1);
c=(y==3)+(m==4);
d=(x==1)+(y==3)+(z==4)+(m==2);
if(a && b && c && d)
{
cout<<x<<endl;
cout<<y<<endl;
cout<<z<<endl;
cout<<m<<endl;
return 0;
}
}
}
}
}
}
return 0;
}
16:點評賽車
總時間限制:1000ms 內存限制:65536kB
描述
4名專家對4款賽車進行評論
1)A說:2號賽車是最好的;
2)B說:4號賽車是最好的;
3)C說:3號賽車不是最好的;
4)D說: B說錯了。
事實上只有1款賽車最佳,且只有1名專家說對了,其他3人都說錯了。
請編程輸出最佳車的車號,以及說對的專家。
輸入
無輸入。
輸出
輸出兩行。第一行輸出最佳車的車號(1-4中的某個數字)。第二行輸出說對的專家(A-D中的某個字母)。
樣例輸入
(無)
樣例輸出
1
A
提示
樣例輸出只是格式說明,並非正確答案
代碼
#include<iostream>
using namespace std;
int main()
{
bool a,b,c,d;//記錄四位專家的話
int best;//最佳車的車號
for(best=1;best<=4;best++)
{
a=(best==2);//如果最好的車是2號,那麼a說的額是對的
b=(best==4);
c=!(best==3);
d=!b;
if(a+b+c+d==1)//只有一位專家說的是對的
{
cout<<best<<endl;
if(a==1)
cout<<"A";
else if(b==1)
cout<<"B";
else if(c==1)
cout<<"C";
else
cout<<"D";
return 0;
}
}
return 0;
}