How many days?
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 9097 Accepted Submission(s): 5219
Problem Description
8600的手机每天消费1元,每消费K元就可以获赠1元,一开始8600有M元,问最多可以用多少天?
Input
输入包括多个测试实例.每个测试实例包括2个整数M, k,(2 <= k <= M <= 1000).M = 0, k = 0代表输入结束.
Output
对于每个测试实例输出一个整数,表示M元可以用的天数。
Sample Input
2 2 4 3 0 0
Sample Output
3 5
Author
8600
Source
HDU 2006-12 Programming Contest
问题简述:(略)
问题分析:
这是一个模拟题。
钱花1元少1元,花1元就够1天用,花够k元就可以获赠1元,老老实实模拟就可以了。
1元1元模拟有点慢啊,每次k元k元模拟就快了,干脆每次nk元模拟岂不更快?花nk元就会获赠n元,考虑剩余的零头,迭代计算下去就可以了。
程序说明:(略)
题记:(略)
参考链接:(略)
AC的C++语言程序如下:
/* HDU1555 How many days? */
#include <iostream>
using namespace std;
int main()
{
int m, k;
while(cin >> m >> k && (m || k)) {
int days = 0, cnt = 0;
while(m) {
m--, days++, cnt++;
if(cnt == k)
m++, cnt = 0;
}
cout << days << endl;
}
return 0;
}
AC的C++语言程序(正解)如下:
/* HDU1555 How many days? */
#include <iostream>
using namespace std;
int main()
{
int m, k;
while(cin >> m >> k && (m || k)) {
int days = 0;
while(m >= k) {
days += k * (m / k);
m = m % k + m / k;
}
days += m;
cout << days << endl;
}
return 0;
}