Fork me on GitHub

第一道交互题


EOJ被我刷屏了。。。满屏的Idleness Limit Exceeded。。。直到ZZW给了答案才知道怎么写。

原题链接:经典的猜数游戏

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <bits/stdc++.h>
using namespace std;
int main(int argc, char * argv[])
{
int low=-1e9;
int up=1e9;
while(1)
{
int mid=(low+up)>>1;
cout<<mid<<endl;
//printf("%d\n",mid);
//fflush(stdout);
string s;
cin>>s;
if(s=="equal") break;
if(s=="small") low=mid+1;
else if(s=="big") up=mid-1;
}
return 0;
}

题目很简单,关键是你怎么清空缓存。

两种方法:

1.cout<<endl直接清空缓存。

2.如果你用了printf,那么后面就要加fflush(stdout);

另附java代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int low=-1000000000;
int up=1000000000;
String s;
do {
int mid=(low+up)>>1;
System.out.println(mid);
System.out.flush();
s=in.nextLine();
switch(s) {
case "big":
up=mid-1;
break;
case "small":
low=mid+1;
break;
case "equal":
break;
}
} while(!s.equals("equal"));
}
}

注意用法:System.out.flush();

donate the author