qsort应用
每天都会收到ai个礼物,到第n天的时候,然然发现他的宿舍被礼物搞得一团糟,所以然然打算到超市买一个柜子装礼物。但是超市有m个柜子,每个柜子都有不同的容量bi,然然想知道每个柜子最多可以装多少天的礼物(可以不从第一天开始装礼物)。同一天的礼物必须同时装进柜子或者同时不装进柜子(比如第一天收到2个礼物,你不能将它分解成1 + 1个礼物。)
输入格式:
第一行输入两个整数n,m。
第二行输入 n 个整数,表示第 i(1 <= i <= n)天然然收到了 ai 个礼物。
第三行输入 m 个整数,表示第 i(1 <= i <= m)个柜子的容量是 bi。
输出格式:
输出m个整数,表示第i(1 <= i <= m)个柜子最多可以装多少天的礼物。
输入样例:
在这里给出一组输入。例如:
3 2
1 5 2
2 4
输出样例:
在这里给出相应的输出。例如:
1 2
#include <stdio.h>
#include <stdlib.h>
int compare(const void* p1, const void* p2)
{
return (int)(*(int*)p1 - *(int*)p2); //->升序
//return (int)(*(int*)p2 - *(int*)p1); //->降序
}
int main()
{
int n,m;
scanf("%d%d",&n,&m);
int a[n];
for (int i=0;i<n;i++)
scanf("%d",&arr[i]);
//int n = sizeof(a) / sizeof(a[0]);
qsort(a, n, sizeof(a[0]), compare);
//第一个数组地址,第二个容量,第三个一个大小,第四确定升序降序
while(m--)
{
int sum;
scanf("%d",&sum);
int i=0;
for (;sum>0 && i<n;i++)//先加1在判断
sum-=a[i];
if (sum>0)
printf("%d",i);
else printf("%d",i-1);
if(m!=0)
printf(" ");
}
}