鱼C论坛

 找回密码
 立即注册
查看: 1944|回复: 5

套餐选择

[复制链接]
发表于 2020-5-23 19:36:59 | 显示全部楼层 |阅读模式

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

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

x
某公司有18种月消费套餐,保存在数组a中,a是第i种套餐的金额

int a[19]={0,18,38,108,48,68,35,72,66,120,180,65,75,85,56,66,92,15,68};

输入客户的月实际消费金额,为他们推荐与消费金额最接近的套餐。

注意:与消费金额相差最小的套餐都要输出,可以选用求整数y绝对值的标准函数abs(y)

输入格式:
输入客户的月实际消费金额

输出格式:
按格式输出推荐的套餐:该客户可推荐?号套餐,?元

如果有多个套餐与消费金额同样接近,则一行输出一个。

输入样例:
70
输出样例:
该客户可推荐5号套餐,68元
该客户可推荐7号套餐,72元
该客户可推荐18号套餐,68元

请问这个程序应该怎么写?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-5-23 19:39:42 | 显示全部楼层
先自己试下,如果不行再来发帖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-23 19:49:55 | 显示全部楼层
xiaosi4081 发表于 2020-5-23 19:39
先自己试下,如果不行再来发帖
#include<stdio.h>
#include<math.h>
int main()
{
        int a[19]={0,18,38,108,48,68,35,72,66,120,180,65,75,85,56,66,92,15,68},n,t=0,i,b[19],temp;
        scanf("%d",&n);
        for(i=0;i<=19;i++)
            b[i]=abs(a[i]-n);
        if(b[i]>b[i+1])
        {
                temp=b[i+1];
                b[i+1]=b[i];
                b[i]=temp;
        }
        for(i=0;i<19;i++)
        {
                if(b[i]<b[i+1])
                t=i;
        }
        printf("该客户可推荐%d号套餐,%d元\n",t,b[0]);
        return 0;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-23 20:05:53 | 显示全部楼层
xiaosi4081 发表于 2020-5-23 19:39
先自己试下,如果不行再来发帖

这个代码应该怎么改
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-23 20:17:22 | 显示全部楼层
定义结构体
struct package {
    int index;
    int price;
}
index 表示数组索引, price 表示数组中,索引对应的值。可以得到一个新的数组 struct package[]。
然后,对上述数组,按照 price 排序。
最后,对于任意给定的消费金额,二分查找。

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

使用道具 举报

发表于 2020-5-28 17:23:09 | 显示全部楼层

你这代码风格看的真是头疼。。。
好好把格式写好,理清思路在动手,我稍微在你的基础上改了一下,遍历两次,解决。
#include <stdio.h>
#include <stdlib.h>
void commendPack();

int main(){
        commendPack();
        return 0;
}

void commendPack()
{
    int a[19]={0,18,38,108,48,68,35,72,66,120,180,65,75,85,56,66,92,15,68};
    int n;
    int tempMin = 0;
    printf("请输入该用户的消费金额:\n");
        scanf("%d",&n);
    for(int i = 0; i < 19; i++){//第一次遍历找出最小的差值
        if (i > 0 && abs(a[i] - n) < abs(a[i-1] - n)) {
            tempMin = a[i];
        }else{
            tempMin = a[i-1];
        }
    }
    
    for(int i = 0; i < 19; i++){//第二次遍历打印等于最小差值的所有元素
        if (abs(a[i] - n) == abs(tempMin - n)) {
            printf("该客户可推荐%d号套餐,%d元\n",i,a[i]);
        }
    }
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-13 17:29

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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