1069向z同学学习
Z同学为了实现暑假去云南旅游的梦想,决定以后每天只消费1元,每花k元就可以再得到1元,一开始Z同学有M元,问最多可以坚持多少天。
输入
输入2个整数M, k,(2 <= k <= M <= 1000)。
输出
输出一个整数,表示M元可以消费的天数。
样例输入 Copy
4 3
样例输出 Copy
5
题解:这是一道递归求解的水题,难度一般般,递归时间复杂度为O(n)
但是可以转化成一般性的数学问题求解,一步到位时间复杂度为O(1)
考虑到M 和K 的 大小关系,得具体分成两部分求解:
1)m/k <k 时 额外得到的钱数就少于k,那么总钱数就等于 m + m/k
2)除去1)外的情况 每花k元就可以再得到1元,换言之k天只需要k-1元钱,但是得考虑第一次花了k元钱时,自己兜里是否还能剩k-1块钱 ,只要还剩的钱>=k-1,就能得到额外的一块钱,所以这才是本题要害
总天数=总钱数=(m-(k-1)/(k-1) +m
代码如下(本还能再减少行数 就这样了,哈哈)
#include <bits/stdc++.h> using namespace std; int stuz(int m,int k){ int ans; if(m/k<k) ans= m+(m/(k)); else ans=(m-(k-1))/(k-1) +m ; return ans; } int main(){ int m,k; cin>>m>>k; int ans=stuz(m,k); cout<<ans; return 0; }