• ベストアンサー

適当に割り当ててくれるソフト

こんにちは。早速ですが質問です。 1500という数字A、100という数字B、150という数字C、500という数字D が仮にあるとします。 1500という数字を作る為に、 Bが何個、Cが何個、Dが何個必要か? を自動的に求めてくれるようなソフトを探しています。 結果として、 パターン1 A = B=15、C=0、D=0 パターン2 A = B=10、C=0、D=1 というような感じで出してくれるようなものがあったら幸いです。 どうぞよろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

項目が増えるとそのスクリプトじゃ面倒ですね。 function funcDZ って感じのを項目数分用意しないといけないので・・・。 以下にプログラムをアップロードしたので、試してみてください。 総当り方式というロジックは、そのスクリプトと一緒です。 ソースつけましたので、危険だと思った場合は、ご自分でコンパイルしてください。 フリーのDelphiコンパイラでコンパイルできると思います。 5回以上ダウンロードするとダウンロードできなくなるので 質問者の方がダウンロードするまでは他の方は、お控えください。 http://www1.axfc.net/uploader/File/so/21970.zip&key=okwave

その他の回答 (3)

回答No.3

並びも適当だし、重複とかあると思うんで。 プログラム中の"|"を","に変更して。 結果をコピーして、テキストファイルに貼り付けて 拡張子をcsvにして、エクセルに読ませて、 並び替えたり重複消したりしてください。 あとAが大きいと、ブラウザが固まるので注意してください。

yuhki_m
質問者

補足

すばらしいものをありがとうございます。 あとこの数字なのですが、A~Dと記載したのですが、 実際は、結構な数があります。 その場合、どこの数字を触ったらいいのでしょうか? よろしくお願いします。

回答No.2

適当すぎるけど、javascriptだけでも出来ると思ったんで書いてみました。 test.html という名前でテキストファイルを作成して メモ帳開いて、以下をコピーして貼り付けて。 IEなどのブラウザで開いてください。 たぶん動くと思います。 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <meta http-equiv="Content-Style-Type" content="text/css"> <meta http-equiv="Content-Script-Type" content="text/javascript"> <title>test</title> <style type="text/css"><!-- body{ font-family: "MS ゴシック",monoscapce; } div{ border:solid 1px #000000; } table,th,td,caption{ font-size: 90%; font-weight: normal; border: solid 1px #000000; border-collapse: collapse; text-align: center; } --> </style> <script language="JavaScript"> <!-- var A=1500; var B=100; var C=150; var D=500; function lenfix(s){ var cf = 8; var len = s.length; var tmp = ""; for (len=s.length;len<cf;len++){ tmp = tmp + "&nbsp;"; } return s+tmp; } function output(str){ var tmp=""; if(document.getElementById){ var obj=document.getElementById("result"); if(typeof(obj.innerHTML)!="undefined"){ tmp=obj.innerHTML; obj.innerHTML=tmp+lenfix(str); } } } function funcBX(x,y,z){ var test=0; var chk=0; x = (A-(C*y + D*z))/B; test = parseInt(x); if (x>0){ if (x==test){ chk = B * x + C * y + D * z; output( lenfix(B +" x " + x) + " | "+ lenfix(C +" x " + y) + " | "+ lenfix(D +" x " + z) + " | "+ lenfix(chk+" funcBX") + "<br>\n"); } } } function funcCY(x,y,z){ var test=0; var chk=0; y = (A-(B*x + D*z))/C; test = parseInt(y); if (y>0){ if (y==test){ chk = B * x + C * y + D * z; output( lenfix(B +" x " + x) + " | "+ lenfix(C +" x " + y) + " | "+ lenfix(D +" x " + z) + " | "+ lenfix(chk+" funcCY") + "<br>\n"); } } } function funcDZ(x,y,z){ var test=0; var chk=0; z = (A-(B*x + C*y))/D; test = parseInt(z); if (z>0){ if (z==test){ chk = B * x + C * y + D * z; output( lenfix(B +" x " + x) + " | "+ lenfix(C +" x " + y) + " | "+ lenfix(D +" x " + z) + " | "+ lenfix(chk+" funcDZ") + "<br>\n"); } } } function calc(){ A=document.fm1.uiA.value; B=document.fm1.uiB.value; C=document.fm1.uiC.value; D=document.fm1.uiD.value; var test=0; var x=0; var y=0; var z=0; var mx = A/B; var my = A/C; var mz = A/D; var chk=0; output("----------<br>\n"); output( lenfix("(B x X)")+" | "+ lenfix("(C x Y)")+" | "+ lenfix("(D x X)")+" | "+ lenfix("A(chksum)")+"<br>\n"); for (y=0; y<=my; y++){ z=0; funcBX(x,y,z); for (z=0; z<=mz; z++) { x=0; funcCY(x,y,z); for (x=0; x<=mx; x++) { funcDZ(x,y,z); } } } } function resetfunc(){ document.fm1.uiA.value=A; document.fm1.uiB.value=B; document.fm1.uiC.value=C; document.fm1.uiD.value=D; } function resetfunc2(){ if(document.getElementById){ var obj=document.getElementById("result"); obj.innerHTML=""; } } --> </script> </head> <body onload="resetfunc()"> <form name="fm1"> A<input name="uiA" type="text" value=""><br> B<input name="uiB" type="text" value=""><br> C<input name="uiC" type="text" value=""><br> D<input name="uiD" type="text" value=""><br> <input type="button" value="run" onclick="calc()"> <input type="button" value="clear" onclick="resetfunc2()"> </form> <div id="result"> <p>result</p> </div> </body> </html>

回答No.1

関数電卓とか solver 系のソフトウェアでできますね。 エクセルがあれば、それで十分でしょう。 探してもなかなかエクセルよりマシなものは無いと思います。 その作業だけに特化したプログラムは存在していないと思うんで、作るしかないのでは。あったとしても公開はされていないと思う。 作るのは、各種スクリプトやDelphi personal(?)とかのフリーのコンパイラが一番手っ取り早いと思う。

yuhki_m
質問者

お礼

ありがとうございます。 しかし、当方にはプログラミングやエクセルの知識は無く、 どうしていいものかさっぱりな状況です。 プログラミングのカテゴリで聞けば答えてもらえるでしょうか。 ありがとうございました、。

関連するQ&A