ちょっと数学的な問題を、パソコンで解きたいと思います。
合計が決まった数で、ある数の集まりの中からその和の組み合わせを求めたいのですが、何を使ってどのようにすればよいでしょうか。
ソフトは、Excel/Access/FileMakerがあります。
回答でなくても、自分ならこうやるよ、という意見も大歓迎です。
よろしくお願いします。
(例題)
{2550,1210,90150,110223,17112,142816,87442,14650,1701413,11788,4460,24180}の中で総和が1949096になる数の組み合わせは?
No.1ベストアンサー
- 回答日時:
すべての組み合わせについて合計を計算し、与えられた数と一致するか比較するプログラムを書いちゃいます。
InternetExplorerがあれば、JavaScriptが使えるはずなので、
それで書いてみます。下記の内容のファイルをたとえば、kumi.html
という名前で保存し、IEで開けば結果が表示されます。
<pre>
<script>
input="2550,1210,90150,110223,17112,142816,87442,14650,1701413,11788,4460,24180"
sum=1949096
data=new Array(20)
data=input.split(",")
n=data.length
//一応、入力値の解釈が正しいかどうか表示してみる。
for(i=0;i<n;i++){ document.writeln(i+" "+ data[i]) }
// curent_sum = Σ flag[i]*data[i]
// データ数分の和を計算する。flag[i]は、0か1の値をとる。
// 配列useをいろいろなパターンで生成することですべての組み合わせを調べる。
flag=new Array(n)
n_ans=0 //見つかった答えの数
ni_no_n_jou = Math.pow(2,n) //2^nとする言語が多いが、JavaScriptではMath.powを使う。
for(j=0;j<ni_no_n_jou;j++){
make_flag_array(j) //サブルーチン、下で定義されている。
cur_sum=0
for(i=0;i<n;i++){cur_sum += flag[i]*data[i] }
if(cur_sum==sum){ n_ans++; write_ans() }
}
function make_flag_array(j){
tmpj=j
for(i=0;i<n;i++) {
amari = tmpj % 2
flag[i]=amari
tmpj = (tmpj - amari)/2
}
}
function write_ans(){
document.writeln("答え("+n_ans+"): ")
for(i=0;i<n;i++){ document.write(" + "+flag[i]*data[i]) }
document.writeln()
}
</script>
</pre>
参考URL:http://tohoho.wakusei.ne.jp/js/math.htm#xMath,ht …
私はてっきりVBAを使った回答が来ると思っていましたが、JavaScriptとは度肝を抜かれました。
すばらしいです!有難うございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CreateProcessでの環境変数の設...
-
matlabのソースコードをpython...
-
CSVファイルの行と列のセルって...
-
列の計算
-
C++ multipart/form-data f
-
エクセルVBA:日付データの変換...
-
ポインター引数の関数でコンパ...
-
エクセルシート名の制限を変更...
-
UTF-8で5~6バイトになる文字コ...
-
10Mバイトて文字数に すると何...
-
COBOLのCOMP形式について
-
Excel 1セル当りの文字数が2...
-
【VB2005】テキストボックス内...
-
バイト列とバイナリ列の違いが...
-
COleDateTime とtime_t
-
Excel VBA メール作成について ...
-
char str[256]の256の意味は?
-
PHPのCookieが有るか無いかで、...
-
Javaで日本語1文字のバイト数
-
日本語で関数名等を記述するの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
stable diffusionのエラー
-
int型(2バイト)データの分割
-
printfの%eで指数部分の桁数を...
-
ポインター引数の関数でコンパ...
-
C#でのswitch文
-
エクセルVBA:日付データの変換...
-
C++/CLIのオブジェクト型配列
-
'dataType' 引数を Null にする...
-
【Excel VBA】10進数を2進数に...
-
pythonでDBのカラム名で取得し...
-
c言語での wavファイルの編集(...
-
linuxのシェルでファイル名に先...
-
MySQLに登録すると文字化け
-
&ReadParseでフォームの値が取...
-
10個の実数に対する降順ソート...
-
PICNICのVB制御プログラム
-
途中経過も表示するプログラム
-
ビットデータのチェック方法
-
PINVOKEで構造体配列をマーシャ...
-
c言語 Bitについて
おすすめ情報