问题标题: 酷町堂:2708 猜数

0
0
已解决
周建勋
周建勋
中级光能
中级光能

2708   猜数

题目描述 Description

下课了,有两个同学想放松下,于是其中的小山同学想出来一个很好玩的游戏,要小蜀同学猜他带了多少零花钱。

猜的方法是:小蜀同学说一个数,由小山来判断。如果小山认为自己没有那么多钱,会回答“too high”,如果小山认为比这多,则回答“too low”;如果他认为游戏结束时,他会说“right on”,每次游戏结束,由小蜀来判断是不是小山说谎了,如果说谎,则输出“Dishonest”,否则输出“honest”。

输入描述 Input Description

输入一个整数(0<n<=10),接下来的一行是(too high,too low,right on)中的一个。如果是right on,则输入结束

输出描述 Output Description

输出只有一行,说谎了则输出“Dishonest”,否则输出“honest”

样例输入 Sample Input

 

10
too high
3
too low
4
too high
2
right on

样例输出 Sample Output

Dishonest

#include<iostream>
#include<climits>
using namespace std;
int main()
{   
    int n,zx=INT_MAX,zd=INT_MIN;
    string a;
    for(int i=0;i<n;i++){
        cin>>n;
        getline(cin,a); 
        getline(cin,a);

        if(a=="too high"){
            if(n<zx) 
                zx=n;
        }
        else if(a=="too low"){
            if(n>zd) 
                zd=n;
        }
        else if(a=="right on"){
            if(n<zx&&n>zd) 
                cout<<"honest"; 
            else
                cout<<"Dishonest";
        }        
        else if(a==a){
            cout<<"honest";
            break;
        }
    }
    return 0;
}

哪错了???


1
已采纳
赵逸凡
赵逸凡
初级启示者
初级启示者

先给你找下初步错误,题目说是输入一个整数n,后面跟一个字符串,那么不是

for(int i=0;i<n;i++)

你的n的main函数初值是srand随机数,所以这样的for循环没有意义,应该是

while(str!="right on")

但是这样会先第一次输入n再输入str,导致下一次的要以第二次开始输出,这种写法是可以,但遇到其他题目就不行了,所以可以

while(1)
{
    cin>>n;
    getline(cin,str);
    if(str=="right on")break;
}

如果按上面两种方法写,那么while循环结束要写出cout结果,我的写法是

//while循环省略
//int i=0 每输入一次i++
struct node
{
    int num;
    bool p;//如果p是0则说明此数比最后的right on的数要小,是1说明比他大。这里不考虑相等
}a[10000];//结构体你学过,所以可以用
----------------------------------------------------------------------------
i++;
if(str=="too high")
{
    a[i].num=n;
    a[i].p=1;
}
if(str=="too low")
{
    a[i].num=n;
    a[i].p=0;//这条语句可以省略,因为全局变量实数默认初值为false,在此题默认为比最后的n小。
}
仅为部分代码!

 

0
0
我要回答