华为题目1...2014.5.1

来源:互联网 发布:unity3d声音不会衰减 编辑:程序博客网 时间:2024/06/05 20:55
#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);

0 0
原创粉丝点击