+"/"+PArray2[a]);
}
}
}
}
}
}
//((A#B)#C)#D
for (var k = 0; k<4; k++) {
if (j != k && i != k) {
Num4k = Number(Num4[k]);
for (var l = 0; l<PArray1.length; l++) {
var kArray1:Array = [];
var kArray2:Array = [];
kArray1.push(PArray1[l]+Num4k);
kArray2.push("("+PArray2[l]+"+"+Num4k+")");
kArray1.push(PArray1[l]-Num4k);
kArray2.push("("+PArray2[l]+"-"+Num4k+")");
kArray1.push(Num4k-PArray1[l]);
kArray2.push("("+Num4k+"-"+PArray2[l]+")");
kArray1.push(PArray1[l]*Num4k);
kArray2.push("("+PArray2[l]+"*"+Num4k+")");
kArray1.push(PArray1[l]/Num4k);
kArray2.push("("+PArray2[l]+"/"+Num4k+")");
kArray1.push(Num4k/PArray1[l]);
kArray2.push("("+Num4k+"/"+PArray2[l]+")");
for (var m = 0; m<4; m++) {
if (k != m && j != m && i != m) {
Num4m = Number(Num4[m]);
for (var n = 0; n<kArray1.length; n++) {
res1.push(kArray1[n]+Num4m);
res2.push(kArray2[n]+"+"+Num4m);
res1.push(kArray1[n]-Num4m);
res2.push(kArray2[n]+"-"+Num4m);
res1.push(Num4m-kArray1[n]);
res2.push(Num4m+"-"+kArray2[n]);
res1.push(kArray1[n]*Num4m);
res2.push(kArray2[n]+"*"+Num4m);
res1.push(kArray1[n]/Num4m);
res2.push(kArray2[n]+"/"+Num4m);
res1.push(Num4m/kArray1[n]);
res2.push(Num4m+"/"+kArray2[n]);
}
}
}
}
}
}
}
}
}
var retArray:Array = [];
for (var m = 0; m<res2.length; m++) {
//if (Number(res1[m])>=23.99 && Number(res1[m])<=24.01) {
if (res1[m] == 24) {
var ok:Boolean = true;
for (var i = 0; i<retArray.length; i++) {
if ((res2[m]+"="+res1[m]) == retArray) {
ok = false;
}
}
if (ok) {
retArray.push(res2[m]+"="+res1[m]);
}
}
}
return retArray;
}
//计算字串表达式的值
//参数:字串计算表达式,只能有数字(可以是小数和负数),+ - * / ( )等符号,自动忽略空格。
function evalString(表达式:String):Number {
//删除字串中的空格
var i = 0;
while (true) {
i = 表达式.indexOf(" ", i);
if (i == -1) {
break;
}
表达式 = 表达式.slice(0, i)+表达式.slice(i+1);
}
var 堆栈:Array = ["@"];
//栈底标记"@"
var a, b, c, d:String, Err:String = "ok";
var _fh = 1;
//正负号
var posN = "";
// 扫描表达式
for (var i = 0; i<表达式.length; i++) {
switch (表达式.charAt(i)) {
case "(" :
//左括号前面是数字,就插入乘号,否则就直接入栈。即左括号前的乘号可以省略。
d = 表达式.charAt(i-1);
if ((d>"0" && d<"9") || d == ")") {
堆栈.push("*");
}
堆栈.push(表达式.charAt(i));
break;
case ")" :
//右括号则退栈计算,直到遇见一个左括号
b = 堆栈.pop();
c = 堆栈.pop();
a = 堆栈.pop();
if (堆栈.pop() == "(") {
堆栈.push(计算两数(a, c, b));
} else {
//请拖动“组件”Alert到舞台上,然后删除,它就出现在库中了
//这样才能利用下面的弹出提示信息窗口。
mx.controls.Alert.show("括号不匹配!", "表达式错误");
return Number("");
}
break;
case "*" :
case "/" :
//如果前一个运算符为*或/,则退栈计算,再入栈,否则直接入栈
d = 堆栈[堆栈.length-2];
if (d == "*" || d == "/") {
b = 堆栈.pop();
c = 堆栈.pop();
a = 堆栈.pop();
堆栈.push(计算两数(a, c, b));
}
堆栈.push(表达式.charAt(i));
break;
case "-" :
//判断是减号?还是负号?
d = 表达式.charAt(i-1);
if (i == 0 || d == "(" || d == "/" || d == "*") {
_fh = -1;
break;
}
case "+" :
//如果前一个运算符不是左括号也不是栈底,则退栈计算,再入栈
d = 堆栈[堆栈.length-2];
if (d != "(" && d != "@") {
b = 堆栈.pop();
c = 堆栈.pop();
a = 堆栈.pop();
堆栈.push(计算两数(a, c, b));
}
堆栈.push(表达式.charAt(i));
break;
default :
//如果是数字字符或者小数点则转化为数字
posN += 表达式.charAt(i);
//如果下一个字符是运算符则把当前数字压入栈中
d = 表达式.charAt(i+1);
if (!(d != "." && (d>"9" || d<"0"))) {
break;
}
堆栈.push(parseFloat(posN)*_fh);
posN = "";
_fh = 1;
}
}
//扫描完毕,计算栈中乘下数据
do {
b = 堆栈.pop();
c = 堆栈.pop();
a = 堆栈.pop();
堆栈.push(计算两数(a, c, b));
} while (堆栈.length>3);
var ret = Number(堆栈.pop());
if (Err == "除数为零") {
mx.controls.Alert.show("除数为零!", "错误:");
} else if (堆栈.pop() != "@" || isNaN(ret)) {
mx.controls.Alert.show("请检查计算表达式!", "错误:");
}
//返回结果
return ret;
//计算两个数
function 计算两数(a, 运算符, b):Number {
var ret = 0;
if (运算符 == "+") {
ret = a+b;
} else if (运算符 == "-") {
ret = a-b;
} else if (运算符 == "*") {
ret = a*b;
} else if (运算符 == "/") {
if (!b) {
Err = "除数为零";
return Number("");
} else {
ret = a/b;
}
}
return ret;
}
}
作者: 熊猫 时间: 2007-4-4 12:55
不是我写的,仅仅只是看的懂一部分,,感谢网友ybzjllj
4 g2 G: m5 S. Z
作者: 冰封爱 时间: 2007-4-4 22:01
有几段素废的。。还可以再简洁一点。。。
作者: 猴子很忙 时间: 2007-4-4 22:10
4个数算24
貌似大二的时候用C写过,递归一下,用不了几行
作者: 荷兰猪 时间: 2007-4-4 22:38
真长啊....
没有特别需要的话...
用basic不是更简洁?
作者: ⒎哖以後 时间: 2007-4-5 03:28
额。。。。。。
作者: 半只菜青虫 时间: 2007-4-5 07:45
作者: 捣蛋鬼 时间: 2007-4-5 08:51
伤脑筋啊
作者: 卑小鄙 时间: 2007-4-5 10:44
(5-1/5)*5=24
作者: fimqad 时间: 2007-4-5 10:52
传说中的算牌器
欢迎光临 下沙论坛 (http://bbs.xiasha.cn/) |
Powered by Discuz! X3.3 |