试题 算法提高 林丹大战李宗伟
资源限制
时间限制:1.0s 内存限制:256.0MB
问题描述
我们用0表示林丹,1表示李宗伟。
输入数据中每行会给出一个0或者1,表示对应选手得1分。
当一方得分达到21分时,只要该方与对方分差超过1分,该方即胜出。
你需要输出最后获胜选手的代号。
输入格式
若干行每行一个0或者1。
输出格式
一行一个0或者1表示胜者。
样例输入
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
样例输出
1
数据规模和约定
输入数据可能存在多余信息,选手需要在第一次出现胜者时马上输出。
读入可以使用while (cin >> x){},该代码块会在读入所有数据后执行完毕。
思路:依次记录两个人的分数,当达到二十一分时做比较,当一方领先超过一分可结束比赛,可以用两人的差取绝对值当达到二十一分且差大于一时可以结束,谁的分数大为谁获胜。
代码如下:
#include<iostream>
#include<cmath>
using namespace std;
int main(){
int lin,li,n,linscore=0,liscore=0,sumscore;
while(cin>>n){
if(n==1){
liscore++;
} else{
linscore++;
}
sumscore=linscore-liscore;
if((linscore==21 || liscore==21) && fabs(sumscore)>1){
if(linscore>liscore){
cout<<"0";break;
}else{
cout<<"1";break;
}
}
}
}