我想要控制n的范围应该怎么办
西大东门有超级多的西瓜!小西走到东门,希望能和舍♂友一起享受。但是小西身上只有n( 0<n<10000)块钱, 一个瓜需要一块钱,店家有两个特价方案,一种是买3送1,一种是买5送2!
小西希望自己能买到最多的西瓜,你能帮帮她吗
#include<stdio.h>
#include<math.h>
int main(void)
{
int a,b,n;
while(scanf("%d",&n)!=EOF)
{
int a=n/3*4+n%3,b=n/5*7+n%5;
if(a<b)
printf("%d\n",b);
else
printf("%d\n",a);
}
return 0;
} 本帖最后由 sunrise085 于 2020-11-18 00:35 编辑
你的程序不单单是控制n的范围的问题,运算结果也是不对的。
比如8元钱最多能买11个西瓜(7+4),但是你的程序算出的结果是10个(7+3)
#include<stdio.h>
#include<math.h>
int main(void)
{
int a,b,n;
int flag=1;
while(1)
{
while(1){//这个内层循环是用来控制输入范围的,若输入数值不在范围之内则需要重新输入
flag=scanf("%d",&n);//判断是否有正确输入,如果输入数字,则flag为1
if (n>0 && n<10000)//判断n是否在范围之内,
break;//若在范围之内,则跳出内层循环
printf("超出范围了,请重新输入!\n");
}
if (flag!=1)//若flag不为1,说明没有输入数字,则结束循环
break;
a=n/5*7+n%5;//按照最大的买,买5送2,
if(n%5>=3)//若余数超过3,则在买3送1,即再增加一个西瓜
a+=1;
printf("%d元最多买%d个西瓜\n",n,a);
}
return 0;
} sunrise085 发表于 2020-11-17 20:59
你的程序不单单是控制n的范围的问题,运算结果也是不对的。
比如8元钱最多能买11个西瓜(7+4),但是你的 ...
while(1)下面的括号里是什么意思啊。。。
还有下面那个if我也没看懂{:10_266:} 本帖最后由 jackz007 于 2020-11-17 21:31 编辑
3和 5 都是质数,它们的最小公倍数是 15,同样花 15 块钱,如果按非特惠价购买,可以买到 15 个西瓜,如果按 "买3送1" 方案可以买到 (3 + 1) × 5 = 20 个,如果按 "买5送2" 方案可以买到 (5 + 2)× 3 = 21 个,显然,购买策略应该是尽可能多按 "买5送2" 方案买,剩下的钱尽量按 "买3送1" 买,剩下不够特惠价格的钱才按非优惠价购买,下面就是根据这个思想编写的代码
#include <stdio.h>
main(void)
{
int i , j , k , m ;
printf("键入小明的钱数 : ") ;
scanf("%d" , & m) ;
for(i = 0 ; (i + 1) * 5 <= m ; i ++) ;
for(j = 0 ; (j + 1) * 3 <= m - 5 * i ; j ++) ;
k = m - i * 5 - j * 3 ;
if(i) printf("买 5 送 2 : %3d 组\n" , i) ;
if(j) printf("买 3 送 1 : %3d 组\n" , j) ;
if(k) printf("买 1 得 1 : %3d 组\n" , k) ;
printf("小明总共可以买到 : %3d 个西瓜\n" , i * 7 + j * 4 + k) ;
}
编译、运行实况
D:\00.Excise\C>g++ -o x x.c
D:\00.Excise\C>x
键入小明的钱数 : 189
买 5 送 2 :37 组
买 3 送 1 : 1 组
买 1 得 1 : 1 组
小明总共可以买到 : 264 个西瓜
D:\00.Excise\C> jackz007 发表于 2020-11-17 21:23
3和 5 都是质数,它们的最小公倍数是 15,同样花 15 块钱,如果按非特惠价购买,可以买到 15 个 ...
噢噢噢噢懂了懂了~谢谢!!{:10_323:} 姜姜酱酱 发表于 2020-11-17 21:21
while(1)下面的括号里是什么意思啊。。。
还有下面那个if我也没看懂
我添加了一下注释 sunrise085 发表于 2020-11-18 00:36
我添加了一下注释
好滴!!谢谢!!
页:
[1]