题目背景
温馨提醒:吸烟有害健康,请勿尝试吸烟!
题目描述
Peter 有 n 根烟,他每吸完一根烟就把烟蒂保存起来,k(k>1)个烟蒂可以换一个新的烟,那么 Peter 最终能吸到多少根烟呢?
与某些脑筋急转弯不同的是,Peter 并不能从异次元借到烟蒂,抽完后再还回去。
输入格式
每组测试数据一行包括两个整数n,k(1<n,k)。
输出格式
对于每组测试数据,输出一行包括一个整数表示最终烟的根数。
输入输出样例
输入 #1
4 3
输出 #1
5
输入 #2
10 3
输出 #2
14
首先审题,题目问能抽多少根烟,通过到达k支烟我们可以看出,这道题可以运用循环解决,而且是用while或者do...while,因为不知道什么时候循环结束。
所以这时候我们有了一个框架,首先设置三个变量:n,k,sum。其中,n和k是用来接受输入,sum用于计算一共多少烟,那么现在主体框架是这样的
#include"stdio.h"
int main()
{
int n,k,sum=0;
scanf("%d %d",&n,&k);
while()
{
//代码区
}
printf("%d",sum);
return 0;
}
输入两个题目给的数据,放入循环中运算判断,那么我们再来想,如果抽的烟蒂足够的话,就给总数加一,并且还要将这些兑换的烟和为凑够k支烟的剩下的烟蒂一起再做一次比较,那么可以得到以下代码:
while((n/k)>0)
{
sum +=n + (n / k); //将最开始的烟与兑换的烟的数量加在一起
n = (n % k) + (n / k); //将兑换的烟的数量与兑剩下的烟的数量重新赋给n,省掉一个新的声明
}
第一排代码的目的是将最开始的烟与兑换的烟的数量加在一起,第二排代码的目的是将兑换的烟的数量与兑剩下的烟的数量重新赋给n,省掉一个新的声明;
但是这里犯了个错误:多加了几次n,整体变大了。所以我们应该给最初的n声明一个变量,或者给 每次兑换的烟蒂加兑剩下的烟的数量 声明一个变量,这里我选择的为初始n值声明一个变量,然后放最后循环结束给他加上去,最终代码如下:
#include"stdio.h"
int main()
{
int n, k, t, sum = 0;
scanf("%d %d", &n, &k);
t = n;
while ((n / k) > 0){
sum += (n / k);
n = (n % k) + (n / k);
}
sum += t;
printf("%d", sum);
return 0;
}
写的很生疏
希望对你有所帮助