當前位置:首頁 » 編程語言 » 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 19:05:31 瀏覽:782
5的源碼是 發布:2025-05-15 19:04:07 瀏覽:719
c語言創建的源文件 發布:2025-05-15 18:54:08 瀏覽:611
3個數字密碼鎖有多少種 發布:2025-05-15 18:49:48 瀏覽:684
壓縮包手機打開 發布:2025-05-15 18:37:34 瀏覽:217
安卓取消耳機模式怎麼取消 發布:2025-05-15 18:24:24 瀏覽:59
氣球怎麼解壓視頻 發布:2025-05-15 18:20:00 瀏覽:783
電腦軟體密碼怎麼設置密碼 發布:2025-05-15 18:09:07 瀏覽:107
android應用是否運行 發布:2025-05-15 18:02:40 瀏覽:10
java排序list 發布:2025-05-15 18:02:40 瀏覽:298