Driver0309 @ 2019-07-22 13:49:07
#include<iostream>
using namespace std;
int main()
{
int n,k,sum,i;//n根烟,k个烟蒂可以换一根新烟,sum是最后吸的烟数,i是收集的烟蒂数
cin>>n>>k;
for(sum=0,i=0;n>0;n--,sum++,i++)
if(i==k)
{
n++;
sum++;
i=0;
}
cout<<sum-1;
}
by Driver0309 @ 2019-07-22 13:49:38
求大神帮助!
by Bbaka @ 2019-07-22 14:06:54
#include<iostream>
using namespace std;
int main(){
int n,k,sum,i;
cin>>n>>k;
for(sum=0,i=0;n>=0;n--,sum++,i++)
if(i==k){
n++;
i=0;
}
cout<<sum-1;
}
这样写试试?
by 雒仁韬 @ 2019-07-22 14:16:00
在你的程序里,n++代表剩余的烟蒂数,sum代表已经抽的烟蒂数。当i==k时,你既加了n,又加了sum,相当于新获得的这根烟抽了两遍(即获得后抽了一遍sum++,又同时存了起来n++)所以才会出现这种情况。任意去掉两条语句中的一条即可。
by yangyijing @ 2019-07-22 14:16:56
#include<iostream>
using namespace std;
int main()
{
int n,k,sum,i;
cin>>n>>k;
for(sum=0,i=0;n>0;)
{n--;sum++;i++;
if(i==k)
{
n++;
i=0;
}}
cout<<sum;
}
这样就好了。 你那个里面在i等于k的时候烟的总数加了。 可这时他并没有抽烟(n--)所以不用sum++
by 雒仁韬 @ 2019-07-22 14:18:05
还有,sum为何要-1?
by Driver0309 @ 2019-07-22 15:00:12
@IQZ_ 已经通过了!谢谢指出!
by Driver0309 @ 2019-07-22 15:00:38
谢谢各位的提醒和指出!
by Driver0309 @ 2019-07-22 15:05:29
@雒仁韬 你看@IQZ_的回复,程序中循环执行条件是n>=0,这样在n等于0的时候sum还会++一次,所以要减1;@yangyijing的程序用的是n>0,和你的一样,所以不用减1。