老親介護に悩む30~60代の方へ
老親介護ねっと[老人ホーム編]
トップ 老人ホームの選び方 介護関連ニュース 新規オープンホーム情報 老人ホーム取材レポート お問い合わせ リンク集 Q&A

こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

回答受付中の質問

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;
}

投稿日時 - 2018-06-13 19:20:48

QNo.9508038

困ってます

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

>再帰を用いたプログラムの流れを上手く理解するコツ

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

投稿日時 - 2018-06-13 19:37:08