你今天学C了吗 发表于 2020-5-23 19:36:59

套餐选择

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

int a={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元

请问这个程序应该怎么写?

xiaosi4081 发表于 2020-5-23 19:39:42

先自己试下,如果不行再来发帖

你今天学C了吗 发表于 2020-5-23 19:49:55

xiaosi4081 发表于 2020-5-23 19:39
先自己试下,如果不行再来发帖

#include<stdio.h>
#include<math.h>
int main()
{
      int a={0,18,38,108,48,68,35,72,66,120,180,65,75,85,56,66,92,15,68},n,t=0,i,b,temp;
      scanf("%d",&n);
      for(i=0;i<=19;i++)
            b=abs(a-n);
      if(b>b)
      {
                temp=b;
                b=b;
                b=temp;
      }
      for(i=0;i<19;i++)
      {
                if(b<b)
                t=i;
      }
      printf("该客户可推荐%d号套餐,%d元\n",t,b);
      return 0;
}

你今天学C了吗 发表于 2020-5-23 20:05:53

xiaosi4081 发表于 2020-5-23 19:39
先自己试下,如果不行再来发帖

这个代码应该怎么改

赚小钱 发表于 2020-5-23 20:17:22

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

XFCoding 发表于 2020-5-28 17:23:09

你今天学C了吗 发表于 2020-5-23 20:05
这个代码应该怎么改

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

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

void commendPack()
{
    int a={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 - n) < abs(a - n)) {
            tempMin = a;
      }else{
            tempMin = a;
      }
    }
   
    for(int i = 0; i < 19; i++){//第二次遍历打印等于最小差值的所有元素
      if (abs(a - n) == abs(tempMin - n)) {
            printf("该客户可推荐%d号套餐,%d元\n",i,a);
      }
    }
}
页: [1]
查看完整版本: 套餐选择