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