タイトル : Re^5: 組み合わせ合計検索 つづき 投稿日 : 2023/08/17(Thu) 11:10 投稿者 : 魔界の仮面弁士
> お世話になります。 > ↑実行しますと 以下のようになります。 比較すると、追加されているのは、 Dim 値一覧3 As Integer() = 〜 探索(1230, 値一覧3) の 2 か所だけですね。 > このような結果になりますか? なりません。 手元の VS2010 で新規プロジェクトを用意し、そのまま漏らさず貼りつけてみると 設定値:590 合計値:587 詳細値:42, 45, 500 設定値:586 合計値:585 詳細値:25, 60, 500 設定値:88792 合計値:88792 詳細値:1011, 1245, 1497, 2887, 2994, 3296, 3517, 4101, 4366, 4655, 6290, 6494, 14116, 14823, 17500 設定値:1230 合計値:1230 詳細値:36, 40, 45, 51, 55, 65, 69, 76, 82, 98, 106, 108, 115, 119, 165 という結果が出力されます。 > No.12102 のロジックをもう一度、現在のフォームにあるプログラムへ貼り付けると > iの部分でエラーでるので以下のように宣言していました。 なんというエラーが出ているのですか? > For i = index To maxIndex > '設定値を超えるものは除外した上で、[値]の昇順に並べる > Dim ordered As Integer() = (From v In values Where v <= targetValue Order By v).ToArray() > Dim i As Integer = 0 いや、なんのためにそんな“破壊工作”を…!? ループ前にあったフィルタリング(と並び替え)を、わざわざ ループ内で毎回やりなおす形に書き換えている時点で、まず意味が分からないですし、 何より今のそのコードでは、「For i = index To …」と「Dim i As Integer = …」とで 変数 i が重複して宣言されてしまっているではないですか。 アルゴリズム以前の問題として、文法エラーになってしまいますので、 そもそも実行すらできないはず。 それに、そのループ終端となっている「To maxIndex」の値を求める処理は、 本来の元ソースでは For 文の直前に書かれた '探索処理 Dim maxIndex = ordered.GetUpperBound(0) という処理であったはずです。(値リストから、余剰データを除去した後の最大Indexを取得) それなのに、その変数 ordered の宣言さえも、ループの前では無く、 ループ内で「Dim ordered As Integer() = ……」と書かれているわけですよね。 そうなると、maxIndex の算出時点で、変数未定義エラーになってしまうはず。 出鱈目にも程がありすぎて草枯れそう。 いったいどんなコードを書いているのでしょう? (^_^; |