PAT Basic Level 20.月饼

思路分析

构造一个结构体数组,用于存放月饼的货量、总价、单价(这里便于之后的排序及计算操作)。之后利用排序算法将月饼按单价降序排列,最后计算利润,这里采用了递归。

代码实现

#include <stdio.h>
#define MAX 1000
struct moon{
        double height;
        double price;
        double single;
    };
void qsort(struct moon target[], int left, int right); 
//按月饼滴单价降序排序 
double calculus(struct moon target[], int request, int lim, int i); //计算总销售额 
void swap(struct moon target[], int x1, int x2); //交换两个结构体 
int main(){
    int i, kinds, request;
    double benefit;
    scanf("%d%d", &kinds, &request);
    struct moon store[MAX];
    for(i = 0; i < kinds; i++)
    scanf("%lf",&store[i].height);
    for(i = 0; i < kinds; i++)
    scanf("%lf",&store[i].price);
    for(i = 0; i < kinds; i++)
    store[i].single = store[i].price/store[i].height;
    qsort(store, 0, kinds);
    benefit = calculus(store, request, kinds, 0);
    printf("%.2lf", benefit);
}
/* - - - - - - - -*/
void swap(struct moon target[], int x1, int x2){
    struct moon mid;
    {   mid.height = target[x1].height;
        mid.price = target[x1].price;
        mid.single = target[x1].single;
    }
    {   target[x1].height = target[x2].height;
        target[x1].price = target[x2].price;
        target[x1].single = target[x2].single;  
    }
    {   target[x2].height = mid.height;
        target[x2].price = mid.price;
        target[x2].single = mid.single; 
    }
}

void qsort(struct moon target[], int left, int right){
    int last, i;
    last = left;
    if(left >= right)
    return 0;
    for(i = left; i < right; i++){
        if(target[i].single > target[left].single)
            swap(target, ++last, i);
    }
    swap(target, last, left);
    qsort(target, left, last);
    qsort(target, last+1, right);
}

double calculus(struct moon target[], int request, int lim, int i){
    double benefit = 0;
    if(i >= lim)
    return 0;
    if(target[i].height >= request){
        benefit = request*target[i].single;
        return benefit;
    }
    else{
        benefit = target[i].price;
        return benefit + calculus(target, request - target[i].height, lim, i+1);
    }

}

PS:结构体内的变量可以减少至两个,但对应的需要改写swap函数以及calculus函数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值