有人能帮我看看为什么错了吗

P1150 Peter 的烟

独孤枭燕 @ 2019-08-22 20:56:05

include<bits/stdc++.h>

using namespace std;

int n,k,sum,num;

int main()

{

cin>>n>>k;
sum+=n;
while(num>k)
{
    num=n%k;
    sum=sum+n/k;
}
cout<<sum;
return 0;

}


by 灵光一闪 @ 2019-08-22 21:00:04

@独孤枭燕 因为你的while循环只会循环一次


by 传奇666666 @ 2019-08-22 21:00:20

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n,k,ans;
int main()
{
    cin>>n>>k;
    ans=n;
    while(n>=k)
    {
        ans+=(n/k);
        n=n/k+n%k;
    }
    cout<<ans;
    return 0;
}

by 传奇666666 @ 2019-08-22 21:00:35

应该这么写


by 传奇666666 @ 2019-08-22 21:00:57

您的代码应该每次都会输出n


by 0nullptr @ 2019-08-22 21:01:38

@独孤枭燕 您的while循环写的不对,应该是

while(n>=k){
    num=n%k;
    n/=k;
    s+=n;
    n+=num;
}

另外说一句,以后发代码要点</>按钮


by 灵光一闪 @ 2019-08-22 21:01:51

@传奇666666 这个用公式是O(1)对吧?


by 传奇666666 @ 2019-08-22 21:05:39

就直接

cout<<n+(n-1)/(k-1)

应该也是对的


by 独孤枭燕 @ 2019-08-22 21:14:20

谢谢大佬们的帮助


by 冰冰手里有糖 @ 2019-08-23 13:40:52

@独孤枭燕

include<bits/stdc++.h>

using namespace std;

int main(){

int a,k,sum=0;
cin>>a>>k;
int cigarette=a;
int summ=a;
while(cigarette>=k){
    int i,j;
    i=cigarette/k;
    j=cigarette%k;
    cigarette=i+j;
    summ+=i;
}
cout<<summ;
return 0;

}


|