有一批集装箱要装上一艘载重量为c的货轮,其中集装箱的重量为Wi,要求装载体积不受限制的情况下,将尽可能多的集装箱装到货轮上。
#include<stdio.h>
void del(int a[],int n,int x);//
int min(int a[],int n);
int main()
{
intcontainernum;
intweight[1000];//定义weight数组用于存放每个集装箱的重量
intloaded[1000];//定义loaded数组用于存放每个要装箱的重量
intmaxload;//最大装载量
intsum=0;//首先定义sum=0;
intp=0;//loaded数组的每个数组元素的下标!
printf("请输入集装箱个数:");
scanf("%d",&containernum);
printf("请输入货轮载重量:");
scanf("%d",&maxload);
printf("请逐个输入集装箱重量:\n");
for(inti=0;i<containernum;i++)
{
scanf("%d",&weight[i]);//记录所有的集装箱
}
while(sum<maxload)//当sum的值小于maxload时
{
loaded[p]=min(weight,containernum);//找到所有集装箱中最小的箱子
sum=sum+loaded[p];//装进去
del(weight,containernum--,loaded[p]);//删除weight[]里面的箱子且weight数组的长度-1
p++;
}
printf("要装入的集装箱重量分别为:");//遍历输出所有装入的集装箱
for(intj=0;j<p-1;j++)//这里是先装进去后测试sum是否大于maxload,比如当装4个箱子时,不够再装第五个箱子,
//p已经加1了,但是当装第六个箱子时才能判断原来第五个箱子装进去时满了,实际已经装了4个箱子也就是p-1
{
printf("%d ",loaded[j]);
}
printf("\n");
return 0;
}
int min(int a[],int n)
{
inti,min=a[0];
for(i=1;i<n;i++)
{
if(a[i]<min)
{
min=a[i];
}
}
returnmin;//找出weight[]中最小的箱子
}
void del(int a[],int n,int x)
{
int i,j;
for(i=0;i<n;i++)
{
if(a[i]==x)
{
for(j=i;j<n-1;j++)
{
a[j]=a[j+1];
}
}
}//删除weight[]中最小的箱子
}