本帖最后由 smile1110 于 2017-1-28 06:44 编辑
原题:商店老板搞活动,老板不允许赊账,有n瓶矿泉水,每n个空瓶可以换一个新的,问最多能喝多少瓶矿泉水?
修正二:
我又咨询了一下大神,104瓶矿泉水,每3空瓶兑换1瓶,会输出136,而答案是137,因为第一次循环过程中留下的3和第二次循环过程中留下的1 加起来也能兑换1瓶,只要简单的确定一下n>=f即可解决这个问题,这下程序总算没有啥问题了。
[Asm] 纯文本查看 复制代码 #include <stdio.h>
int main()
{
int n,f,total;
while(scanf("%d%d",&n,&f)!=EOF)
{
total=n;
if(n==0&&n==0)
{
total=n+f;
printf("%d",total);
}
else
{
while(n>=f)
{
n=n-f+1;
total=total+1;
}
printf("%d",total);
}
}
}
修正一:
现在买1w瓶矿泉水,每5空瓶兑换1个新的,那总共可以兑换12499瓶,啧啧。想了大半天,这样就可以实现被除数k被整除n-1次仍然可以被整除的问题了,解决让n可以大于k两倍的局限性。
[C] 纯文本查看 复制代码 #include <stdio.h>
int main()
{
int n,k,total;
while(scanf("%d%d",&n,&k)!=EOF)
{
total=n;
if(n==0&&k==0)
{
total=n+k;
printf("%d",total);
}
else
{
while(n>k)
{
n=n-k+1;
total=total+1;
}
printf("%d",total);
}
}
return 0;
}
原文:问题一:petter 有n支香烟,每k个烟头可以换一支新烟,问一共能抽多少支香烟?
问题二:商店老板搞活动,老板不允许赊账,有n瓶矿泉水,每k个空瓶可以换一个新的,问最多能喝多少瓶矿泉水?
这俩题目是同一个问题
大神的写的程序循环了3次,我的解决办法仅仅是判断一次就根据公式出结果了,思路如下:
这题目明显 一共三种情况,第一种n和k全是负数没意义
第二种,n和k相等是0或者1,那自然能抽n+k支香烟
第三种,n>k,那自然能抽 (n除以k)+(n除以k 再除以k)....+n支香烟了,不过我暂时只会让程序除两次
[C] 纯文本查看 复制代码 #include <stdio.h>
//petter 有n支香烟,每k个烟头可以换一支新烟
//问一共能抽多少支香烟?
int main()
{
int n,k;
while(scanf("%d%d",&n,&k)!=EOF)
{
if(n==0&&k==0)
printf("%d",n+k);
else
printf("%d",n/k/k+n/k+n);
}
return 0;
}
验证一下,输入100和5进去试试。假如买了100瓶矿泉水,每5瓶能兑换一瓶,那先拿着100瓶兑换20瓶,接着拿着那20瓶兑换4瓶,最后4瓶少一瓶无法兑换了,而且老板不允许赊账,那只能喝100+20+4=124瓶。
|