转发一贴
地址:
http://tieba.baidu.com/f?ct=335675392&tn=baiduPostBrowser&sc=4647544445&z=257105656&pn=0&rn=50&lm=0&word=keyto9#4647544445(原文)
40 回复:在IE上运行的数学程序
给n个数添加+-*/()组成的算式等于给定的数
不允许随便调换数的位置,不允许数字合并一起
把下面的代码复制然后粘贴到IE地址栏,然后敲回车就运行了
不要回复这个贴子
javascript:s=clipboardData.getData('Text');s.substring(82).replace(/nc/g,'nction')
<script>eval('var aa=new Array('+prompt('输入数据组,用豆号隔开,最后一个数表示要运算出的结果','5,3,1,5,2,24')+')') ;var al=aa.length-1,a=new Array(al),bb=new Array(al-1),b=new Array(al-1),c=new Array(al-1),i=0,e=new Array(al),res=new Array(),an=aa[al];Ai(bb,0);do{Ai(c,0);do{Ac(a,aa);Ac(b,bb);Ai(e,4);for(j=0;j<al;j++){i=c[j];switch(b[i]){case 0:if(e[i+1]<2){j=al+1;continue}a[i]+=a[i+1];break;case 1:if(e[i+1]<2){j=al+1;continue}a[i]-=a[i+1];break;case 2:if(e[i+1]==2||e[i+1]==3){j=al+1;continue}a[i]*=a[i+1];break;case 3:if(e[i+1]==2||e[i+1]==3||a[i+1]==0){j=al+1;continue}a[i]/=a[i+1];break}e[i]=b[i];He(b,i-1);He(a,i);He(e,i)}if(j==al&&Math.abs(a[0]-an)<1e-8){Ai(e,4);Ac(a,aa);Ac(b,bb);for(j=0;j<al;j++){i=c[j];switch(b[i]){case 0:case 1:a[i]+=(b[i]?'-':'+')+a[i+1];break;case 2:case 3:if(e[i]<2)a[i]='('+a[i]+')';if(e[i+1]<2)a[i+1]='('+a[i+1]+')';a[i]+=(b[i]-3?'*':'/')+a[i+1];break}e[i]=b[i];He(e,i);He(b,i-1);He(a,i)}Ar(a[0])}for(i=al-2;i>=0;c[i+1]=0){if(++c[i]<al-1-i)break;i--} }while(i>=0);for(i=al-2;i>=0;bb[i+1]=0){if(++bb[i]<4)break;i--}}while(i>=0);document.write('\x42\x79\x20\x4B\x65\x79\x74o9<br>');func Ar(s){for(var i=res.length-1;i>=0;i--){if(res[i]==s)return}res[i=res.length]=s;document.write(i+1+': '+s+'<br>')}func Ai(b,n){for(var i=b.length-1;i>=0;i--)b[i]=n}func Ac(a,b){for(var i=b.length-1;i>=0;i--)a[i]=b[i]}func He(a,i){for(var j=i+1,s=a.length-1;j<s;j++)a[j]=a[j+1]}</script>
作者:KeyTo92008-8-9 10:39 回复此发言