Peter的烟(水题测试2017082401&洛谷1150)

时间:2023-03-09 23:52:07
Peter的烟(水题测试2017082401&洛谷1150)

题目链接:Peter的烟

这道题基本做法很水,不解释。

#include<bits/stdc++.h>
using namespace std;
int main(){
int n,k;
scanf("%d%d",&n,&k);
int ans=0;
int num=0; //1
while(n>0){
ans+=n;
int x=n+num;
num=x%k;
n=x/k;
}
printf("%d",ans);
return 0;
}

1处:num用于存储兑换后剩余的烟头

这还没完,下面我讲一下非循环做法。

我们首先抽了n根烟,加上。

然后兑换时,我们用k个烟头兑换后,抽完又有一个烟头,所以花费掉了k-1个烟头,所以我们实际上只用了k-1个烟头,所以直接n除以k-1即可。

又因为万一正好剩k-1个烟头怎么办?所以还要特判即可。

代码如下:

#include<bits/stdc++.h>
using namespace std;
int main(){
int n,k;
scanf("%d%d",&n,&k);
int sum=n+n/(k-1);
if(n%(k-1)==0){
sum--; //1
}
printf("%d",sum);
return 0;
}

1处:如果多有k-1个,多兑换了一个,所以减掉一个。