- 締切済み
perlでの実装方法です。
プログラミングは初めてです。 よろしくお願いします。 コンテナ A B C D E 耐久度 10 20 15 12 8 現在の負担 100 80 60 60 88 コンテナごとに耐久度があり そのコンテナの耐久度×荷物の重さがそのコンテナの負担になります。 上のようにDBに値を持つ場合 重さの違う荷物を数十個振り分けていくとして 一番負担の少ないコンテナに振り分けるようにしたいのですが どのようにくめば良いのか悩んでいます。。 重さ10の荷物が来たときは A 100+10*10 =200 B 80+20*10 =280 C 60+15*10 =210 D 60+12*10 =180 E 88+8*10 =168 で合計の値の小さいEに振り分けて、Eの負担が168になり また次の荷物を振り分けていきます。 言語はperlです。 何か良い実装方法があれば教えてください。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- naritat
- ベストアンサー率0% (0/0)
my @container = qw/A B C D E/; my @taikyu = (10, 20, 15, 12, 8); my @futan = (100, 80, 60, 60, 88); my @omosa = 10 .. 20; # 数十個の荷物の重さ for my $omosa (@omosa) { # 耐久度 * 重さを加えて、新しい負担数を求める my @new = @futan; map { $new[$_] += $taikyu[$_] * $omosa } 0 .. $#new; # 負担が最小のコンテナ my $i = ( sort { $new[$a] <=> $new[$b] } 0 .. $#new )[0]; # 荷物を入れる $futan[$i] = $new[$i]; print "コンテナ$container[$i]に、重さ${omosa}の荷物を入れました\n"; }
- wormhole
- ベストアンサー率28% (1626/5665)
とりあえず、あなたならどういうコード書くのか書かれた方がよいかと思います。 でないと「私の代わりに課題をやってください」にしか見えないですから。
- myuki1232
- ベストアンサー率57% (97/170)
> DBから値を取って、コードの中では配列としてデータを管理するのがいいのか > それとも何かもっといい方法があるのかなと思ったのです。 この程度のプログラムなら、配列が一番いいでしょう。 連想配列とか、パッケージとかを使ってもいいですが、単純な問題に複雑な方法をわざわざ使うことはないでしょう。
- myuki1232
- ベストアンサー率57% (97/170)
その手順でそのままコードにすればいいかと。 実装方法というのは何が聞きたいのですか? DBとの接続方法か何かですか? 代わりに全部書いてくれというのは無しですよ。 それと、そのコンテナとか荷物とかいうのは架空のものですか、実在のものですか? 振り分けた後はどうしたいのですか?
補足
すみません。 DBへの接続方法とかではなく DBから値を取って、コードの中では配列としてデータを管理するのがいいのか それとも何かもっといい方法があるのかなと思ったのです。 コンテナとか荷物、というのは架空のものです。 振り分けた後は特に考えなくても大丈夫です。 課題的なものですので。