原题链接
这道题最主要的问题其实是排序,再接下来要搞清楚如何求得最大收益。
最大收益=最大正的优惠卷x最大正的商品+最大负的优惠卷x最大负的商品
这里强烈推荐大家使用qsort函数!
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a,const void *b){
int x=*(int *)a,y=*(int *)b;
return x<y;
}
int main(){
int n,m,i,j,sum=0;
scanf("%d",&n);
int q[n];
for(i=0;i<n;i++){
scanf("%d",&q[i]);
}
scanf("%d",&m);
int w[m];
for(i=0;i<m;i++){
scanf("%d",&w[i]);
}
qsort(q,n,sizeof(int),cmp);
qsort(w,m,sizeof(int),cmp);
i=0;
while(q[i]>=0 && w[i]>=0 && i<n && i<m){
sum+=q[i]*w[i];
i++;
}
i=n-1;j=m-1;
while(q[i]<0 && w[j]<0 && i>=0 && j>=0){
sum+=q[i]*w[j];
i--;
j--;
}
printf("%d",sum);
}