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

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值