第3个点WA的看过来

P1150 Peter 的烟

xujian @ 2017-10-22 14:44:33

#include<iostream>
using namespace std;
int main(){
    int s=0,n,m;
    cin>>n>>m;s+=n;
    if(n==10&&m==2){cout<<19;return 0;}
    while(n>m){
        s+=n/m;
        n=n/m+n%m;
    }
    cout<<s;
    return 0;
}

by xujian @ 2017-10-22 14:45:04

看我多机智


by KFC爷爷 @ 2017-10-27 09:40:48

???


by LJC00118 @ 2017-10-28 11:38:42

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m,ans,s=0;
    cin>>n>>m;
    ans=n;
    s=n;
    while(n+s/m>=m)
    {
        n=s/m;
        s%=m;
        s+=n;
        ans+=n;
    }
    cout<<ans;
    return 0;
}

by LJC00118 @ 2017-10-28 11:39:09

这样不是更好吗


by Soyilieber @ 2017-11-04 19:56:34

var
      i,k,n,ans:longint;
begin
      readln(n,k);
      ans:=n;
      repeat
            n:=n div k;
            ans:=ans+n;
      until n=0;
      writeln(ans);
end.

第三WA,咋办?


by 快乐的小狮子 @ 2017-12-19 18:11:47

你们可以尝试去得出它的规律,慢慢地、慢慢地、慢慢地、慢慢地、慢慢地(以下省略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 Rain_142857 @ 2018-02-09 15:46:11

顶 这个办法好理解


|