题目
解题代码如下
#include <stdio.h>
void quicksort(int arr[],int l,int r);
int main(void)
{
int w,n,i,l,k,r;
int arr[40000]={0};
scanf("%d",&w);
scanf("%d",&n);
k=n;
for(i=1;i<=n;i++)
{
scanf("%d",&arr[i]);
}
quicksort(arr,1,n);
l=1;
r=n;
while(l<r)
{
while(arr[l]+arr[r]>w&&l<r)
r--;
if(l<r&&arr[l]+arr[r]<=w) //快排思想的运用
{
k--;
l++;
r--;
}
}
printf("%d",k);
return 0;
}
void quicksort(int arr[],int l,int r)
{
if(l>=r)
return ;
int left=l;
int right=r;
int pivot=arr[left];
while(left<right)
{
while(arr[right]>=pivot&&left<right)
right--;
if(left<right)
arr[left]=arr[right];
while(arr[left]<=pivot&&left<right)
left++;
if(left<right)
arr[right]=arr[left];
if(left==right)
arr[left]=pivot;
}
quicksort(arr,l,left);
quicksort(arr,left+1,r);
}