UVA10684 The jackpot 题解

发布时间 2023-08-17 23:04:29作者: Code_Fish_Hp

题目链接

思路

一道简单模拟题。

用循环模拟每次的处理。对于每次输入的数 \(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;
}