OpenJudge 四大湖 and 點評賽車

下面兩道題通過枚舉處理邏輯判斷問題。有一定的相似性,因此寫在一篇博文中。

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;
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章