求助

P1150 Peter 的烟

藤林椋 @ 2017-11-18 18:31:04

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,k,sum=0;
    cin>>n>>k;
    if(n<k)
    {
        cout<<n;
    }
    if(n==k)
    {
        cout<<++n;
    }
    if(n>k)
    {
        if(n==0)
        {
            cout<<n;
            return 0;
        }
        if(n>0)
        {
            while(n<0)
            {
                n=n-k;
                sum++;
            }
            sum--;
        }
    }
    cout<<sum;
    return 0;

by 快乐的小狮子 @ 2017-12-19 17:57:13

我可以帮你


by 快乐的小狮子 @ 2017-12-19 18:08:22

你可以尝试去得出它的规律,慢慢地、慢慢地、慢慢地、慢慢地、慢慢地(以下省略10000个字)……

好,说正文时间到!

你用些纸笔就能得出:这输出肯定大于等于n,我就设输出变量为ans好了。咱们把ans先赋值n,再把n看作有n个烟蒂,每次都是用掉k个烟蒂,换来一支烟(ans+1,n-k+1)。这是我们惊奇地发现:无非就是一个循环,如果n>=k就循环下去(当n=k-1时,由于要k个烟蒂才能换一支烟,不能讨价还价——也就是换后再还,这是不可以的),每次ans+1以及n-k+1就行了哈!是不是感觉很简单呢?


by ZJH365 @ 2018-02-18 21:21:29

n + (n - 1) / (k - 1); 这样算就可以AC了!!!


|