鱼C论坛

 找回密码
 立即注册
查看: 885|回复: 6

[已解决]我想要控制n的范围应该怎么办

[复制链接]
发表于 2020-11-17 20:35:50 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
西大东门有超级多的西瓜!小西走到东门,希望能和舍♂友一起享受。

但是小西身上只有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;
}
最佳答案
2020-11-17 20:59:55
本帖最后由 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-11-17 20:59:55 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-17 21:21:23 | 显示全部楼层
sunrise085 发表于 2020-11-17 20:59
你的程序不单单是控制n的范围的问题,运算结果也是不对的。
比如8元钱最多能买11个西瓜(7+4),但是你的 ...

while(1)下面的括号里是什么意思啊。。。
还有下面那个if我也没看懂
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-17 21:23:57 | 显示全部楼层
本帖最后由 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>
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-17 21:36:47 | 显示全部楼层
jackz007 发表于 2020-11-17 21:23
3  和 5 都是质数,它们的最小公倍数是 15,同样花 15 块钱,如果按非特惠价购买,可以买到 15 个 ...

噢噢噢噢懂了懂了~谢谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-18 00:36:13 | 显示全部楼层
姜姜酱酱 发表于 2020-11-17 21:21
while(1)下面的括号里是什么意思啊。。。
还有下面那个if我也没看懂

我添加了一下注释
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-18 12:34:29 | 显示全部楼层
sunrise085 发表于 2020-11-18 00:36
我添加了一下注释

好滴!!谢谢!!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-21 06:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表