• 締切済み

c言語の問題

それぞれの重量と価格が分かっているN個の商品から、総重量が定められた上限値limit以下となるように任意個選択したときの合計価格のうちで、最大値を計算したい。構造体itemは商品を表し、そのメンバw, pはそれぞれ重量と価格を表す。N個の商品は配列itemsに格納されている。maxtotal(num, start)を呼び出すことにより、総重量にstartを加えた数がlimit以内であるという条件の元で、インデックスがnum以降の商品から任意個選択したときの合計価格の最大値が得られる。 上記の内容のプログラムについて、●●●に入る操作を書けという問題の解答をお願いします。長時間考えたのですがプログラムの動きが理解できません。再帰を用いたプログラムの流れを上手く理解するコツがあれば教えて欲しいです… #include <stdio.h> #define N 4 typedef struct _item{ int w; int p; } item; int limit; item items[N] = { {1, 100}, {1, 50}, {2, 150}, {2, 100} }; int maxtotal(int num, int start){ int x, y, rval; if(num == N){ return 0; } if(●●● > limit){ rval = maxtotal(●●●, ●●●); } else { x = maxtotal(num + 1, ●●●) + items[num].p; y = maxtotal(num + 1, ●●●); rval = x > y ? x : y; } return rval; } int main(void){ printf("Weight limit?:"); scanf("%d", &limit); printf("Maximum total price is %d\n", maxtotal(0, 0)); return 0; }

みんなの回答

  • maiko0333
  • ベストアンサー率19% (839/4401)
回答No.1

>再帰を用いたプログラムの流れを上手く理解するコツ 同じソースの別プログラムを呼び出すと考えましょう。 別プログラムですから呼んだら必ず帰ってくること。 そこで作った変数はそれぞれ別のものであることが理解できるかと思います。

関連するQ&A