当前位置:首页 » 编程语言 » c语言装箱问题

c语言装箱问题

发布时间: 2022-12-22 01:18:20

c语言1000发子弹装箱问题,如何编写该程序

你可以用一个循环来给数组赋值,因为用的是手机,打字不好打,我就写一下循环部分了吧,,,
for(i=2;i<=10;i
)
for(j=1;j<=i-1;j
)
a[i]=a[i]*2;,,注意数组我这里是11个元素,第一个元素没用,后面刚好十个方便应用。然后数组一开始要初始化全为1

Ⅱ 【急】C语言的箱问题

这是动态规划问题的典型问题

你可以搜一下动态规划解决“装箱问题”和“背包问题”,看一下思想就明白了。

祝顺利解决。

【2001年普及组4】装箱问题

Time Limit:1000MS Memory Limit:65536K
Total Submit:512 Accepted:251

Description

有一个箱子容量为v(正整数,o≤v≤20000),同时有n个物品(o≤n≤30),每个物品有一个体积 (正整数)。要求从m个物品中,任取若千个装入箱内,使箱子的剩余空间为最小。
[样例]
输入:
24 一个整数,表示箱子容量
6 一个整数,表示有n个物品
8 接下来n行,分别表示这n个物品的各自体积。
3
12
7
9
7
输出:
0 一个整数,表示箱子剩余空间。

Input

第一行为箱子容量为v;第二行为物品数;以下n行分别为每个物品的体积;

Output

箱子剩余空间

Sample Input

24
6
8
3
12
7
9
7

Sample Output

0
*/
/*
动态规划,设:a[i,j] 表示选前i个物品刚好能装满 j 空间,则有:
a[i,j] = a[i-1][j] or a[i-1][j-v[i]] j>v[i]
a[i,0] = 0 ;
不过,这题有点特殊:
就是:
a[i,j]只与: i-1有关
所以可以降到一维...
*/
#include <stdio.h>
#include <string.h>

#define MAX 20001

int main(void)
{
int m,n,tv,v,i,j,k ;
int a[MAX] ={0} ;
a[0] = 1;
scanf("%d",&v) ;
scanf("%d",&n) ;

for(i=1 ; i<= n ; i++)
{
scanf("%d",&tv);
for(j=v ; j>=tv ; j--)
if(!a[j])
a[j] = a[j-tv] ;
}
m = v ;
while ( a[m] == 0)
m -- ;
printf("%d ",v-m) ;

return 0 ;
}

Ⅲ c语言编程 装箱子

#include<stdio.h>
#define n 1000
int main(void)
{ int a[n],b[n],i=0,j,x,max=1;
scanf("%d",&x);
for(i=1;i<=x;i++)
scanf("%d",&a[i]);
for(j=1;j<=100;j++)
b[j]=100;
for(i=1;i<=x;i++)
for(j=1;j<=100;j++)
{ if(b[j]-a[i]>=0)
{ printf("%d %d\n",a[i],j);
b[j]=b[j]-a[i];
if(max<j)
max=j;
break;}
}
printf("所需的箱子数目为%d\n",max);
return 0;
}

Ⅳ c语言1000发子弹装箱问题,如何编写该程序

你可以用一个循环来给数组赋值,因为用的是手机,打字不好打,我就写一下循环部分了吧,,, for(i=2;i<=10;i )
for(j=1;j<=i-1;j )
a[i]=a[i]*2;,,注意数组我这里是11个元素,第一个元素没用,后面刚好十个方便应用。然后数组一开始要初始化全为1

Ⅳ C语言的``装箱问题

我运行没问题。

#define N 100
main()
{
int sum, set, i, j, max, check[100];
int volume[N]={8,3,12,7,9,7}, n=6,_n, v=24;
/*scanf("%d", &v);
scanf("%d", &n);

for (i=1;i<=n;i++)
scanf("%d", &volume[i]);

max=0;
*/
set=1;
for (i=1;i<=n;i++)
set*=2; //计算2的N次方。

for (i=0;i<=set;i++)
{
for (j=1;j<=n;j++)
check[j]=0; //清空数组

j=i;
sum=1;
while (j>=1) //把数据转换成二进制数制(1代表取,0代表不取)
{
check[sum]=j%2;
j/=2;
sum++;
}

sum=0; //计算该方案占用的体积
for (j=1;j<=n;j++)
if (check[j]==1)
sum+=volume[j];

if ((sum<=v)&&(sum>=max)) //根据题意作比较
max=sum;

}

printf("%d",v-max); //输出剩余体积。
system("pause");

}
我确实运行没问题。OK,0

Ⅵ 装箱问题

有一个箱子容量为V(正整数,0<=V<=20000),同时有n个物品(0<n<=30,每个物品有一个体积(正整数)。
要求n个物品中,任取若干个装入箱内,使箱子的剩余空间为最小。
样例
输入:
24 一个整数,表示箱子容量
6 一个整数,表示有n个物品
8 接下来n行,分别表示这n 个物品的各自体积
3
12
7
9
7
输出:0 一个整数,表示箱子剩余空间。

# include <stdio.h>
# include <stdlib.h>
typedef struct ele
{ int vno;
struct ele *link;
} ELE;
typedef struct hnode
{ int remainder;
ELE *head;
struct hnode *next;
} HNODE;

void main()
{
int n, i, box_count, box_volume, *a;
HNODE *box_h, *box_t, *j;
ELE *p, *q;
printf("输入箱子容积\n");
scanf("%d",&box_volume);
printf("输入物品种数\n");
scanf("%d",&n);
a=(int *)malloc(sizeof(int)*n);
printf("请按体积从大到小顺序输入各物品的体积:");
for (i=0;i<n;i++) scanf("%d",a+i);
box_h=box_t=NULL;
box_count=0;
for (i=0;i<n;i++)
{ p=(ELE *)malloc(sizeof(ELE));
p->vno=i;
for (j=box_h;j!=NULL;j=j->next)
if (j->remainder>=a[i]) break;
if (j==NULL)
{ j=(HNODE *)malloc(sizeof(HNODE));
j->remainder=box_volume-a[i];
j->head=NULL;
if (box_h==NULL) box_h=box_t=j;
else box_t=box_t->next=j;
j->next=NULL;
box_count++;
}
else j->remainder-=a[i];
for (q=j->head ;q!=NULL&&q->link!=NULL;q=q->link);
/*q=j->next;q!=NULL&&q->link!=NULL;q=q->link*/
if (q==NULL)
{ p->link=j->head;
j->head=p;
}
else
{ p->link=NULL;
q->link=p;
}
}
printf("共使用了%d只箱子",box_count);
printf("各箱子装物品情况如下:");
for (j=box_h,i=1;j!=NULL;j=j->next,i++)
{ printf("第%2d只箱子,还剩余容积%4d,所装物品有;\n",i,j->remainder);
for (p=j->head;p!=NULL;p=p->link)
printf("%4d",p->vno+1);
printf("\n");
}
}

热点内容
超凡先锋配置不行怎么办 发布:2025-05-15 23:27:54 浏览:530
win7取消加密 发布:2025-05-15 23:26:37 浏览:470
不用internet打开ftp 发布:2025-05-15 23:06:00 浏览:153
sql字符串取数字 发布:2025-05-15 22:57:45 浏览:124
推荐编程课 发布:2025-05-15 22:34:12 浏览:618
表拒绝访问 发布:2025-05-15 22:29:37 浏览:978
电脑怎样解压文件 发布:2025-05-15 22:25:32 浏览:439
dns服务器怎么看 发布:2025-05-15 22:17:27 浏览:151
3dm的压缩包 发布:2025-05-15 22:09:23 浏览:662
和存储字长 发布:2025-05-15 21:54:09 浏览:515