这题我是用的贪心算法,其实不用也可以,枚举也能解决,因为情况不多。因为是每连续5个月必有亏损,而一年只有1-5,2-6,3-7,4-8……8-12共8种情况。现在设盈余为S,亏损为D,可列出以下几种情况。
SSSSDSSSSDSS 4s<d
SSSDDSSSDDSS 3s<2d
SSDDDSSDDDSS 2s<3d
SDDDDSDDDDSD s<4d
DDDDDDDDDDDD s>=4d
可判定:
0 <= s <1/4d 每连续5个月种至少1个月D
1/4d <= s < 2/3d 每连续5个月种至少2个月D
2/3d <= s < 3/2d 每连续5个月种至少3个月D
3/2d <= s < 4d 每连续5个月种至少4个月D
4d <= s 全年各月必亏损
代码如下
#include<stdio.h>
void main(){
double s,d;
int surplus;
int flag;
while(scanf("%lf%lf",&s,&d)!=EOF)
{
flag=0;
surplus=0;
if(s>=4*d)
flag=1;
else if((s>=1.5*d)&&(s<4*d))
{
surplus=3*s-9*d;
if(surplus<0)
flag=1;
}
else if((s>=0.666666*d)&&(s<1.5*d))
{
surplus=6*(s-d);
if(surplus<0)
flag=1;
}
else if((s>=0.25*d)&&(s<0.666666*d))
{
surplus=8*s-4*d;
if(surplus<0)
flag=1;
}
else if((s>=0)&&(s<0.25*d))
{
surplus=10*s-2*d;
if(surplus<0)
flag=1;
}
if(flag)
printf("Deficit\n");
else
printf("%d\n",surplus);
}
}