首页 > ACM题库 > HDU-杭电 > HDU 1555 How many days?[解题报告] C++
2013
12-12

HDU 1555 How many days?[解题报告] C++

How many days?

问题描述 :

8600的手机每天消费1元,每消费K元就可以获赠1元,一开始8600有M元,问最多可以用多少天?

输入:

输入包括多个测试实例.每个测试实例包括2个整数M, k,(2 <= k <= M <= 1000).M = 0, k = 0代表输入结束.

输出:

对于每个测试实例输出一个整数,表示M元可以用的天数。

样例输入:

2 2
4 3
0 0

样例输出:

3
5

大清早刷水题找状态

#include<stdio.h>
int main()
{
	int i,j,k,n,m,sum;
	while(scanf("%d%d",&m,&k),k||m)
	{
		sum=0;
		 n=m;
		 while(n>=k)
		 {
			 i=n/k;
			 j=n%k;
			 sum+=i;
			 n=i+j;
		 }
		 printf("%d\n",sum+m);
	}
	return 0;
}

解题报告转自:http://blog.csdn.net/aixiaoling1314/article/details/8908851


  1. 第二个方法挺不错。NewHead代表新的头节点,通过递归找到最后一个节点之后,就把这个节点赋给NewHead,然后一直返回返回,中途这个值是没有变化的,一边返回一边把相应的指针方向颠倒,最后结束时返回新的头节点到主函数。

  2. 给你一组数据吧:29 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 10 1000。此时的数据量还是很小的,耗时却不短。这种方法确实可以,当然或许还有其他的优化方案,但是优化只能针对某些数据,不太可能在所有情况下都能在可接受的时间内求解出答案。