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
顶 这个办法好理解