思路
一道简单模拟题。
用循环模拟每次的处理。对于每次输入的数 \(N\),先判断 \(N\) 的值,如果为 \(0\),直接结束程序,避免死循环。否则就依次输入每次赢或输的钱数,再进行集中判断,获取连胜获得的最多钱数,再判断是否连败,输出结果即可。
参考代码(请勿抄袭):
#include<bits/stdc++.h>
using namespace std;
long long tmp=0,maxn=-1;
bool flag=false;
int money[10010],n;
int main(){
scanf("%d",&n);//先输入一次n
while(n!=0){//如果n不为0,开始处理
for(int i=0;i<n;i++) scanf("%d",&money[i]);//输入每次赢或输的钱数
for(int i=0;i<n;i++){//集中判断
if(money[i]>=0){//如果赢了
tmp+=money[i];//加钱
flag=true;//现在是赢了
}
else if(money[i]<0){//输了钱
if(flag) maxn=max(maxn,tmp);//因为我们一开始设置maxn的值为-1,如果是连败的话就会把maxn的值变成0,不符合我们的目的(如果连败,要输出另外一个句子)。
tmp=0;
flag=false;//重置
}
}
if(flag) maxn=max(maxn,tmp);//特判:最后一次是赢的且总钱数最高
if(maxn!=-1) printf("%s%d%s\n","The maximum winning streak is ",maxn,".");//判断并输出
else puts("Losing streak.");
maxn=-1;//重置
tmp=0;
flag=false;
scanf("%d",&n);//输入n
}
return 0;
}
标签:tmp,jackpot,int,题解,long,money,UVA10684
From: https://www.cnblogs.com/CodeFishHp/p/17639144.html