华为题目1...2014.5.1

本文介绍了一个物品装箱问题的算法实现,目标是最少使用数量的固定容量箱子来装载不同大小的物品,确保总容量不超过箱子限制。通过排序和逐个尝试合并物品的方法,实现了高效的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值