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;
 }