鱼C论坛

 找回密码
 立即注册
查看: 2387|回复: 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元

请问这个程序应该怎么写?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-5-23 19:39:42 | 显示全部楼层
先自己试下,如果不行再来发帖
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-5-23 19:49:55 | 显示全部楼层
xiaosi4081 发表于 2020-5-23 19:39
先自己试下,如果不行再来发帖
  1. #include<stdio.h>
  2. #include<math.h>
  3. int main()
  4. {
  5.         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;
  6.         scanf("%d",&n);
  7.         for(i=0;i<=19;i++)
  8.             b[i]=abs(a[i]-n);
  9.         if(b[i]>b[i+1])
  10.         {
  11.                 temp=b[i+1];
  12.                 b[i+1]=b[i];
  13.                 b[i]=temp;
  14.         }
  15.         for(i=0;i<19;i++)
  16.         {
  17.                 if(b[i]<b[i+1])
  18.                 t=i;
  19.         }
  20.         printf("该客户可推荐%d号套餐,%d元\n",t,b[0]);
  21.         return 0;
  22. }

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

这个代码应该怎么改
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-5-23 20:17:22 | 显示全部楼层
定义结构体
  1. struct package {
  2.     int index;
  3.     int price;
  4. }
复制代码

index 表示数组索引, price 表示数组中,索引对应的值。可以得到一个新的数组 struct package[]。
然后,对上述数组,按照 price 排序。
最后,对于任意给定的消费金额,二分查找。

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

  4. int main(){
  5.         commendPack();
  6.         return 0;
  7. }

  8. void commendPack()
  9. {
  10.     int a[19]={0,18,38,108,48,68,35,72,66,120,180,65,75,85,56,66,92,15,68};
  11.     int n;
  12.     int tempMin = 0;
  13.     printf("请输入该用户的消费金额:\n");
  14.         scanf("%d",&n);
  15.     for(int i = 0; i < 19; i++){//第一次遍历找出最小的差值
  16.         if (i > 0 && abs(a[i] - n) < abs(a[i-1] - n)) {
  17.             tempMin = a[i];
  18.         }else{
  19.             tempMin = a[i-1];
  20.         }
  21.     }
  22.    
  23.     for(int i = 0; i < 19; i++){//第二次遍历打印等于最小差值的所有元素
  24.         if (abs(a[i] - n) == abs(tempMin - n)) {
  25.             printf("该客户可推荐%d号套餐,%d元\n",i,a[i]);
  26.         }
  27.     }
  28. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-16 11:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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