`
人生难得糊涂
  • 浏览: 113847 次
社区版块
存档分类
最新评论

poj2586--求公司盈利

 
阅读更多

题目比较难懂

对于每一个月来说,是盈利如果则盈利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;
}

 

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics