poj2586Y2K Accounting Bug

来源:互联网 发布:魏晋风骨 知乎 编辑:程序博客网 时间:2024/06/05 08:18

背景:再做这道题的时候,我严重怀疑我的英语能力,o(︶︿︶)o 唉,翻译了一个多小时。

思路:由于本题情况比较少,所以可以直接枚举出所有的情况,首先要找出五个月中最少亏损月份,然后就开始枚举出五种情况,最后输出即可。

#include <stdio.h>void print(int n){    if(n<0) printf("Deficit\n");    else printf("%d\n",n);}void YinKui(int m,int s,int d){    int n=0;    if(m==1) n=10*s-2*d;    else if(m==2) n=8*s-4*d;    else if(m==3) n=6*s-6*d;    else if(m==4) n=3*s-9*d;    else n=-1;    print(n);}void Deficit_Month(int s,int d){    int m;    if(d>4*s) m=1;    else if(d*2>3*s) m=2;    else if(d*3>2*s) m=3;    else if(d*4>s) m=4;    else m=5;    YinKui(m,s,d);}int main(void){    int s,d;    while(scanf("%d %d",&s,&d)==2)        Deficit_Month(s,d);    return 0;}

然后看了同学的代码,发现也可以用贪心算法。

下面附同学的代码

#include<stdio.h>  int a[15];  int main ()  {      int s,d;      while (scanf("%d%d",&s,&d)==2)      {          int sum=0;          int i,j;          for(i=5;i>=0;i--)       //一定要写成i>=0   若写成i>0可能出现一种情况i=1的时候sum>0 然后由于i>0退出了  sum仍然>0           {                      //写成i>=0 则上面那种情况变成i=1时sum>0,i=0时sum<0 break               sum=i*s-(5-i)*d;              if(sum<0)break;          }          for(j=0;j<i;j++)              a[j]=s;          for(j=i;j<5;j++)              a[j]=-d;          for(i=5;i<12;i++)          {              a[i]=a[i-5];              sum+=a[i];          }          if(sum>0)          printf("%d\n",sum);          else printf("Deficit\n");      }      return 0;  }  


1 0
原创粉丝点击