基础实验7-2.1 魔法优惠券 (25分)-qsort()

 

 解题思路:

1、优惠券和商品价值按降序排序(选用c自带的qsort函数,最后一个测试点才没有超时,自己写的快排超时了,堆排没有试)

2、先从前往后找,优惠券和商品价值相乘为正的,累计在sum里

    同理,再从后往前找优惠券和商品价值相乘为正的,累计在sum里

#include <stdio.h>
#include <string.h>
int cmp(const void *a,const void *b) {
    return *(int *)b-*(int *)a;
}
int main() {
    int n;
    scanf("%d",&n);
    int i,j;
    int a[n];
    memset(a,0,sizeof(a));
    for(i=0; i<n; i++) {
        scanf("%d",&a[i]);
    }
    qsort(a,n,sizeof(int),cmp);
    int m;
    scanf("%d",&m);
    int b[m];
    memset(b,0,sizeof(b));
    for(i=0; i<m; i++) {
        scanf("%d",&b[i]);
    }
    qsort(b,m,sizeof(int),cmp);
    int sum=0;
    int p1=0,q1=n-1;
    int p2=0,q2=m-1;
    while(p1<=q1&&p2<=q2) {//从前往后
        if(a[p1]*b[p2]>0) {
            sum+=a[p1]*b[p2];
            p1++;
            p2++;
        } else
            break;
    }
    while(p1<=q1&&p2<=q2) {//从后往前
        if(a[q1]*b[q2]>0) {
            sum+=a[q1]*b[q2];
            q1--;
            q2--;
        } else
            break;
    }
    printf("%d",sum);
    return 0;
}
原文地址:https://www.cnblogs.com/snzhong/p/12493893.html