「実験的な指導と演習をプログラミングC言語(第3版)」の浙江省のバージョンの問題を梱包実験7-1-13タイトルセット(20ポイント)

トピック:

商品のN個の項目があると仮定し、それぞれ、サイズS1は、S2が、...、Iをだ、...、Nは、sは、Siが1≤si≤100を満たす整数です。ボックス100の容量(その1-N)であるのグループにこれらの項目を置きます。各項目について、その最初のボックスを収納に記事を置くのに十分ボックス順次走査、:メソッドをパッキング。このパッキングプロセスをシミュレートするプログラムを書いて、配置されているボックスの各記事のシリアル番号を出力し、箱の数のために必要なすべての項目を配置します。

入力フォーマット:

最初の行の入力は、N個のアイテム(≤1000)の数を示し、2行目は、Nは正の整数をSI(記事項目Iの大きさを表し、I≤1001≤s)を得ます。

出力フォーマット:

アイテムの数、一行を表す各項目は、出力の最後の行は、ボックスの数を所望する各ボックスの大きさの順に入力および出力。

サンプル入力:

8
60 70 80 90 30 40 10 20

出力例:

60 1
70 2
80 3
90 4
30 1
40 5
10 1
20 2
5

アイデア:

[1000]デジタルテスト
B [1000]ボックスの数であり、各ボックスは、初期値0は、最初の文書番号0に配置され表す
テスト品A [I] + B [jの値場合 ]> 100 表し手段ボックス未満、J ++ボックスを置き換える
[I] + B [jの場合 <= 100 、次にボックスも搭載[I]試験データを入れるには[J] bのボックスを添加します

コード:

#include<stdio.h>
int main()
{
	int	a[1000],b[1000]={0};
	int n,i,j,flag,c=0;
	scanf("%d",&n);
	for(i=0;i<n;i++)
		scanf("%d",&a[i]);//每个物品大小
	
	for(i=0;i<n;i++)
	{
		flag=0;
		j=0;
		while(flag==0)
		{
			if(a[i]+b[j]<=100)
			{
				b[j]+=a[i];
				flag=1;
				printf("%d %d\n",a[i],j+1);//序号从1开始
			}
			else if(a[i]+b[j]>100)
				j++;
		}
	}
	for(j=0;j<n;j++)//统计占据箱子数
	{
		if(b[j]!=0)
			c++;
		else
			break;
	}
	printf("%d",c);
	return 0;
}
公開された22元の記事 ウォンの賞賛4 ビュー860

おすすめ

転載: blog.csdn.net/qq_43745026/article/details/104918902