套餐选择
某公司有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
先自己试下,如果不行再来发帖
#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;
}
xiaosi4081 发表于 2020-5-23 19:39
先自己试下,如果不行再来发帖
这个代码应该怎么改 定义结构体
struct package {
int index;
int price;
}
index 表示数组索引, price 表示数组中,索引对应的值。可以得到一个新的数组 struct package[]。
然后,对上述数组,按照 price 排序。
最后,对于任意给定的消费金额,二分查找。
你今天学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]