解题思路:
贪心思想,尽量让价格最高的和价格最低的匹配;否则她单独一组
注意事项:
不要自己写排序,不然会时间超限,用qsort()快排函数解决
参考代码:
#include<stdio.h>
#include<stdlib.h>
int cmp(const void * a,const void * b) ;
int main()
{
int w,i=0,j,max,sum=0;
int n;
int price[30001];
scanf("%d",&w);
scanf("%d",&n);
while(n--)
{
scanf("%d",&price[i]);
i++;
}
n=i;
qsort(price,n,sizeof(int),cmp);//快排函数qsort(),在stdlib.h库中;传入四个参数,1:要被排序的数组;2.要被排序的元素个数;3.每个数组元素的大小,用sizeof()获得;4.自己写的cmp函数,用来定义是升序还是降序排序
for(i=0,j=n-1;i<n;i++)//贪心思想,从价格最高的算起,如果它和价格最低的匹配,超过规定上限,就让它单独一组;否则就和价格最低的配对;i,j分别指向当前价格最高的和最低的,从两头向中间移
{
if(i>j)
break;
if(price[i]+price[j]<=w)
j--;
sum++;
}
printf("%d",sum);
return 0;
}
int cmp(const void * a,const void * b)
{
return (*(int*)b-*(int*)a);//b>a 返回正值 ,这样使得快排函数按降序排序 ;若a在前b在后,则定义为升序排序
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复