wangbinyuan @ 2023-03-18 20:32:27
#include<iostream>
using namespace std;
int main()
{
long long n,k,sum=0,num=0;
cin>>n>>k;
sum+=n;
num+=n;
while(1)
{
if(num/k>0)
{
sum+=num/k;
num=num/k;
}
else
{
break;
}
}
cout<<sum;
return 0;
}
by Wallacewwz @ 2023-03-18 20:49:15
#include<iostream>
using namespace std;
int main()
{
long long n,k,sum=0,num=0;
cin>>n>>k;
sum+=n;
num+=n;
while(1)
{
if(num/k>0)
{
sum+=num/k;
num++;
num=num/k;
}
else
{
break;
}
}
cout<<sum;
return 0;
}
这样可以AC
在if(num/k>0)
里面添加了num++
其原理嘛,你自己想想你的思路吧
by Wallacewwz @ 2023-03-18 20:53:04
还是补充一下吧,就是说num表示的是当前吸掉的香烟数量,那么此时你吸掉多一根了,num就要加1,这样除完取整才行。只WA了一个点是因为巧合
啊对了,顺便发一下我的代码
我是纯模拟的
#include <bits/stdc++.h>
//#pragma GCC optimize(2)
using namespace std;
signed main()
{
int n,k;
cin >> n >> k;
int h = 0;
int all = n;
int cnt = 0;
while(all)
{
all--;
cnt++;
h++;
if(h >= k)
{
all++;
h = 0;
}
}
cout << cnt << endl;
return 0;
}
cnt表示一共吸掉的烟,h表示积攒的烟蒂,all表示剩下的烟。每当可以兑换时就直接兑换
思路非常简单,没必要那么麻烦
(当然你也可以参考题解里的神仙做法)
by wangbinyuan @ 2023-03-18 20:56:30
#include<iostream>
using namespace std;
int main()
{
long long n,k,sum=0,num=0,rest=0;
cin>>n>>k;
sum+=n;
num+=n;
while(1)
{
if(num / k > 0)
{
sum += num / k;
rest = num % k;
num /= k;
num += rest;
rest = 0;
}
else
{
break;
}
}
cout<<sum;
return 0;
}
刚才做出来了
by luojunkai @ 2023-03-27 20:53:54
@wangbinyuan
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n,k,sum=0;
cin>>n>>k;
sum=n;
while(n>=k)
{
sum+=n/k;
n=n%k+n/k;
}
cout<<sum;
}
每次循环sum加上可换烟的数量,同时n剩的数量加换来烟的数量。最后输出就行了。
(代码量少,思路也挺简单,可以参考一下)
by Wangyuzeweihai @ 2023-04-07 16:43:28
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n,k;
cin>>n>>k;
cout<<n+(n-1)/(k-1);
return 0;
}
刚才做出来