为啥输入10 3,输出17?求帮助!

P1150 Peter 的烟

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。


|