题目比较难懂
对于每一个月来说,是盈利如果则盈利S,如果亏空则亏d。 每五个月进行一次统计,共统计八次(1-5月一次,2-6月一次.......) 统计的结果是这八次都是亏空。 问题:判断全年是否能盈利,如果能则求出最大的盈利。 如果不能盈利则输出Deficit
明白题目后1A了
这道题用贪心法解,其实也很容易想到,首先用一个数组记录每个月的盈亏,初始化全部为s,又每五个月统计一次一共统计8次, 所以扫描8次,每次求出五个月的和,如果大于等于0 则从后往前将一个月由s改为d(一定要从后往前,想想为什么)。
代码如下
#include "iostream"
using namespace std;
int ans[13];
int getsum(int i)
{
return ans[i]+ans[i+1]+ans[i+2]+ans[i+3]+ans[i+4];
}
int main()
{
int s,d;
while(scanf("%d %d",&s,&d)!=EOF)
{
int i;
for (i=1;i<=12;i++)
{
ans[i]=s;
}
for (i=1;i<=8;i++)//1-5 2-6 ....... 8-12 一共8组
{
int sum=0;
sum=getsum(i);
for (int j=i+4;j>=i;j--)
{
if (sum>=0)
{
ans[j]=-d;
}
else
break;
sum=getsum(i);
}
}
int t=0;
for (i=1;i<=12;i++)
{
t+=ans[i];
}
if (t<0)
printf("Deficit\n");
else
printf("%d\n",t);
}
return 0;
}