部分和問題を再帰関数を用いる全探索で解こうと思っています。(今回扱う部分和問題は、「N個の正の整数a0,a1, ..., aN-1と正の整数Wが与えられます。a0, a1, ..., aN-1の中から何個かの整数を選んで総和をWとすることができるかを判定してください」というものです。W=14としています。)
今回、入力をダイアログからの入力とし、配列Aの個数Nの値をユーザーが好きな長さにできるようにしたいと思い、ダイアログに「追加」ボタンと「終了」ボタンを設置しました。「追加」ボタンを押すと、入力した値が配列Aに追加されます。「終了」ボタンを押すと、配列Aの長さを保存します。
今の問題は、以下のスクリプトで実行すると、画像のようなエラーが出ることです。おそらく、javaScriptとhtmlをうまく繋げることができていない初歩的なミスだと思うのですが、なかなかうまくいきません。どこを修正すればいいでしょうか?よろしくお願いいたします。
html
1<!DOCTYPE html> 2<html lang="ja"> 3<head> 4<meta charset="utf-8"> 5<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0"> 6<script src="code4.9.js"></script> 7<title>original_dialog.html</title> 8 9 10 <style> 11 #dialog { 12 width: 250px; 13 padding: 30px 20px; 14 text-align: center; 15 border: 1px solid #aaa; 16 box-shadow: 2px 2px 4px #888; 17 } 18 </style> 19 20</head> 21<body> 22 <form id="dialog" name="dialog"> 23 <p>数字を入力してください</p> 24 <input id='number'/><br> 25 <input type="button" name="add" value="追加" id="add"/> 26 <input type="button" name="fin" value="終了" id="fin"/> 27 <input type="button" name="cancel" value="キャンセル" id="cancel"/> 28 <div id="output"></div> 29 </form> 30 31</body> 32</html>
javaScript
1'use strict' 2let i; 3let w; 4 5 6function func(i, w, a) { 7 //ペンケース 8 if (i === 0) { 9 if(w === 0) { 10 return true; 11 }else{ 12 return false; 13 } 14 } 15 16 //a[i-1]を選ばない場合 17 if (func(i-1, w, a)) { 18 return true; 19 }else if(func(i-1, w-a[i-1], a)){//a[i-1]を選ぶ場合 20 return true; 21 }else{ 22 return false;//どちらもfalseの場合はfalse 23 } 24} 25 26//入力 27let W = 14; 28 29 //function getArray() {//どうやって関数化しようか 30 //form要素を取得する 31 //const form = document.getElementById("dialog"); 32 const add = document.getElementById("add"); 33 const fin = document.getElementById("fin"); 34 const cancel = document.getElementById("fin"); 35 36 let A = []; 37 38 add.addEventListener("click", () => { 39 var a = document.getElementById("number"); 40 A.push(parseInt(a.value)); 41 }); 42 43 fin.addEventListener("click", () => { 44 let N = A.length; 45 }); 46 47 cancel.addEventListener("click", () => { 48 console.log("null"); 49 }); 50//} 51 52 53//再起的に解く 54if (func(N, W, a) === true) { 55 document.getElementById("output").textContent = "yes"; 56}else { 57 document.getElementById("output").textContent = "no"; 58}
回答1件
あなたの回答
tips
プレビュー