Psst.. new poll here.
Psst.. new forums here.
Microsoft is blocking us again (TY IP Reputation!) so just use oauth login instead. :)
Paste
Pasted as C++ by Gevorg ( 15 years ago )
//поиск решений задачи: из 123456789 получить target = 100
if(!window.console){ //для IE и отключенного Firebug
console = {log: function(X){
if(arguments.length <=1)
alert(X);
},
time: function(){
dat=(new Date()).getTime();
},
tmeEnd: function(){
alert((new Date()).getTime() - dat);
}
}
}
console.time('a'); //данные
s0 = '123456789';
x0 = [0,0,0,0,0,0,0,0, 4];
a = ['+','-','/','*',''];
var target = 100;
plus1 = function(x, i){ //5-ричный счётчик
if(i==null) i=0;
if(++x[i] >= 5){
x[i] =0;
if(++i >=8) return i;
return plus1(x, i);
}else return i;
}
window.sum =0; //поиск решений
var n=1, nn=0, leftPar, rightPar, wasLeftPar, wasDivide;
do{
s='sum=';
wasLeftPar = wasDivide =false;
for(var i =0; i <=8; i++){
if(x0[i]==3 && wasDivide){ //исправление приоритета деления
wasLeftPar = true;
var j = s.lastIndexOf('/') +1;
s = s.substr(0, j) +'('+ s.substr(j) + s0.charAt(i) + a[x0[i]];
}else if(wasLeftPar && x0[i] <3){
wasLeftPar = false;
s += s0.charAt(i) + ')' + a[x0[i]];
}else
s += s0.charAt(i) + a[x0[i]];
if(x0[i]==2)
wasDivide = true;
else if(x0[i] !=4)
wasDivide = false;
}
if(wasLeftPar) s+= ')';
eval(s);
if(sum > 99.999 && sum < 100.001)
console.log(++nn, n, s, sum);
if(plus1(x0) ==8) break;
}while(++n <1000000);
console.log(n);
console.timeEnd('a');
Revise this Paste