#include <STDLIB.H>
#include <STDIO.H>
#include <MATH.H>
/******************************************************/
//算法问题描述:
//有种体积为V的箱子,要将N个东西装进去,然后,每个东西的
//体积为不大于V的正整数,问最少需要多少个箱子,几个可以放
//到同一个箱子中当它们的体积只和要小于V时。
/******************************************************/
/********************************************************
* 函数名: int PARTITION(int A[],int p,int r)
* 函数功能:实现对数组A【】的原址重排.
* 输入参数:N V
* 输出参数:M
* 附加说明:形成一个数q使得数组的前半部分都小于A【q】,后半部分都大于A【q】.
* 作者:YL
* 当前版本: v_1
* 完成日期: 2014-05-01
/********************************************************/
void sort(int *L,int length)
{
int A,i,j;
for(i=0;i<length-1;i++)
for (j=i+1;j<length;j++)
if (L[i]>L[j])
{
A=L[i];
L[i]=L[j];
L[j]=A;
}
}
void main()
{
int V,N;
int i,j;
int *L;
scanf("%d%d",&V,&N);
printf("请输入%d个小于%d的正整数:\n",N,V);
L=(int *)malloc(sizeof(int)*N);
for (i=0;i<N;i++)
scanf("%d",&L[i]);
sort(L,N);
for(i=0;i<N-1;i++)
{
j=i+1;
if (L[i]+L[j]>V)
break;
for (j=N-1;j>i;j--)
{
if(L[i]+L[j]<=V)
{
L[j]=L[j]+L[i];
sort(L+j,N-j);
break;
}
}
}
printf("%d ",N-i);
华为题目1...2014.5.1
最新推荐文章于 2021-11-06 21:20:54 发布