前回作ったプログラムで、多重ループが気に入らなかったので、ちょっと書き直してみました。(^_^;
ちょっと遅くなりましたが、見た目はすっきりしました。
<!-- /* * Komachizan02.html * * □1□2□3□4□5□6□7□8□9=100 * * (1)□={"","-","+"} * (2)□={"","-","+","*","/"} * */ //--> <html> <head> <title>Komachizan.html</title> <script type="text/javascript"> // 重複順列生成 function next_rep_perm(p,n,r) { var t=0; //if(n<=0 || r <= 0) return 0; for(var i=0; i< r; t*=n,t+=p[i++]); for(t++,r--; r>=0; p[r]=t%n,t-=p[r--],t/=n); return(!t); } </script> </head> <body> <script type="text/javascript"> var M=100; var N=3; var R=8; if(N==3) // (1)空白と'+','-'だけ使用する場合 var o=["","-","+"]; else if(N==5) // (2)空白と'+','-','*','/'を使用する場合 var o=["","-","+","*","/"]; var s=["","-"]; var i=new Array(R); for(var j=0; j< R; i[j++]=0); var tm=(new Date()).getTime(); // Timer start for(var j in s){ // 先頭は空白か'-'とする do{ var f= s[j] +"1"+o[i[0]]+"2"+o[i[1]]+"3" +o[i[2]]+"4"+o[i[3]]+"5"+o[i[4]]+"6" +o[i[5]]+"7"+o[i[6]]+"8"+o[i[7]]+"9"; if(eval(f)==M) document.write(f,"=",M,"<br>"); } while(next_rep_perm(i,N,R)); } tm=(new Date()).getTime()-tm; // Timer stop document.write("Runtime : ",tm/1000.0, "[sec]<br>"); </script> </body> </html>
●実行結果
123-45-67+89=100 123-4-5-6-7+8-9=100 123+45-67+8-9=100 123+4-5+67-89=100 12-3-4+5-6+7+89=100 12+3-4+5+67+8+9=100 12+3+4+5-6-7+89=100 1+23-4+56+7+8+9=100 1+23-4+5+6+78-9=100 1+2+34-5+67-8+9=100 1+2+3-4+5+6+78+9=100 -1+2-3+4+5+6+78+9=100 Runtime : 0.175[sec]