算24点
<embed pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" src="http://www.magic-nano.com/webedit/uploadfile/200744123547749.SWF" type="application/x-shockwave-flash" quality="high" style="WIDTH: 550px; HEIGHT: 400px;"></embed> 。。。3547 某人很能算的 <div style="WIDTH: 800px; HEIGHT: 600px;"><embed pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash" src="http://www3.flash8.net/uploadflash/29/flash8net_28149.swf" type="application/x-shockwave-flash" quality="high" style="WIDTH: 700px; HEIGHT: 600px;"></embed></div>[此贴子已经被作者于2007-4-4 12:52:25编辑过]
死细胞的.... 。。。。 //牌初始显示<br/>p1.gotoAndStop(5);<br/>p2.gotoAndStop(18);<br/>p3.gotoAndStop(31);<br/>//表达式计算<br/>ebtn.onPress = function() {<br/> out2.text = evalString(input2.text);<br/>};<br/>//随机产生四个数<br/>RandBtn.onRelease = function() {<br/> //预存52张牌,不含王。<br/> var p54:Array=;<br/> //抽四张牌<br/> var p4:Array=[];<br/> for(var i=0;i<4;i++){<br/> p4.push(p54.splice(random(p54.length),1));<br/> }<br/> //牌显示<br/> for(var i=0;i<p4.length;i++){<br/> _root["p"+(i+1)].gotoAndStop(p4);<br/> }<br/> //数据显示<br/> input.text =p4%13 +","+p4%13+","+p4%13+","+p4%13;<br/>};<br/>//计算按钮<br/>evalBtn.onRelease = function() {<br/> var inStr:String = input.text;<br/> //删除字串中的空格<br/> var i = 0;<br/> while (true) {<br/> i = inStr.indexOf(" ", i);<br/> if (i == -1) {<br/> break;<br/> }<br/> inStr = inStr.slice(0, i)+inStr.slice(i+1);<br/> }<br/> var N4:Array = inStr.split(",");<br/> //以“,”号撤分<br/> var Lok = eval24(N4);<br/> out.text = "";<br/> if (Lok.length == 0) {<br/> out.text = "我没算出来!";<br/> } else {<br/> for (var i = 0; i<Lok.length; i++) {<br/> out.text += Lok+"\n";<br/> }<br/> }<br/>};<br/>//计算函数<br/>function eval24(Num4:Array) {<br/> var Num4i;<br/> var Num4j;<br/> var Num4k;<br/> var Num4m;<br/> var res1:Array = [];<br/> var res2:Array = [];<br/> for (var i = 0; i<4; i++) {<br/> Num4i = Number(Num4);<br/> for (var j = 0; j<4; j++) {<br/> if (i != j) {<br/> Num4j = Number(Num4);<br/> var PArray1:Array = [];<br/> var PArray2:Array = [];<br/> //A任取两个数运算<br/> PArray1.push(Num4i+Num4j);<br/> PArray2.push("("+Num4i+"+"+Num4j+")");<br/> PArray1.push(Num4i-Num4j);<br/> PArray2.push("("+Num4i+"-"+Num4j+")");<br/> PArray1.push(Num4j-Num4i);<br/> PArray2.push("("+Num4j+"-"+Num4i+")");<br/> PArray1.push(Num4i*Num4j);<br/> PArray2.push("("+Num4i+"*"+Num4j+")");<br/> PArray1.push(Num4i/Num4j);<br/> PArray2.push("("+Num4i+"/"+Num4j+")");<br/> PArray1.push(Num4j/Num4i);<br/> PArray2.push("("+Num4j+"/"+Num4i+")");<br/> for (var k = 0; k<4; k++) {<br/> if (j != k && i != k) {<br/> Num4k = Number(Num4);<br/> for (var m = 0; m<4; m++) {<br/> if (k != m && j != m && i != m) {<br/> Num4m = Number(Num4);<br/> var kArray1:Array = [];<br/> var kArray2:Array = [];<br/> //B剩下两个数的运算<br/> kArray1.push(Num4k+Num4m);<br/> kArray2.push("("+Num4k+"+"+Num4m+")");<br/> kArray1.push(Num4k-Num4m);<br/> kArray2.push("("+Num4k+"-"+Num4m+")");<br/> kArray1.push(Num4m-Num4k);<br/> kArray2.push("("+Num4m+"-"+Num4k+")");<br/> kArray1.push(Num4k*Num4m);<br/> kArray2.push("("+Num4k+"*"+Num4m+")");<br/> kArray1.push(Num4k/Num4m);<br/> kArray2.push("("+Num4k+"/"+Num4m+")");<br/> kArray1.push(Num4m/Num4k);<br/> kArray2.push("("+Num4m+"/"+Num4k+")");<br/> for (var a = 0; a<PArray1.length; a++) {<br/> for (var b = 0; b<kArray1.length; b++) {<br/> //(A#B)#(C#D)<br/> res1.push(PArray1+kArray1);<br/> res2.push(PArray2+"+"+kArray2);<br/> res1.push(PArray1-kArray1);<br/> res2.push(PArray2+"-"+kArray2);<br/> res1.push(kArray1-PArray1);<br/> res2.push(kArray2+"-"+PArray2);<br/> res1.push(PArray1*kArray1);<br/> res2.push(PArray2+"*"+kArray2);<br/> res1.push(PArray1/kArray1);<br/> res2.push(PArray2+"/"+kArray2);<br/> res1.push(kArray1/PArray1);<br/> res2.push(kArray2+"/"+PArray2);<br/> }<br/> }<br/> }<br/> }<br/> }<br/> }<br/> //((A#B)#C)#D<br/> for (var k = 0; k<4; k++) {<br/> if (j != k && i != k) {<br/> Num4k = Number(Num4);<br/> for (var l = 0; l<PArray1.length; l++) {<br/> var kArray1:Array = [];<br/> var kArray2:Array = [];<br/> kArray1.push(PArray1+Num4k);<br/> kArray2.push("("+PArray2+"+"+Num4k+")");<br/> kArray1.push(PArray1-Num4k);<br/> kArray2.push("("+PArray2+"-"+Num4k+")");<br/> kArray1.push(Num4k-PArray1);<br/> kArray2.push("("+Num4k+"-"+PArray2+")");<br/> kArray1.push(PArray1*Num4k);<br/> kArray2.push("("+PArray2+"*"+Num4k+")");<br/> kArray1.push(PArray1/Num4k);<br/> kArray2.push("("+PArray2+"/"+Num4k+")");<br/> kArray1.push(Num4k/PArray1);<br/> kArray2.push("("+Num4k+"/"+PArray2+")");<br/> for (var m = 0; m<4; m++) {<br/> if (k != m && j != m && i != m) {<br/> Num4m = Number(Num4);<br/> for (var n = 0; n<kArray1.length; n++) {<br/> res1.push(kArray1+Num4m);<br/> res2.push(kArray2+"+"+Num4m);<br/> res1.push(kArray1-Num4m);<br/> res2.push(kArray2+"-"+Num4m);<br/> res1.push(Num4m-kArray1);<br/> res2.push(Num4m+"-"+kArray2);<br/> res1.push(kArray1*Num4m);<br/> res2.push(kArray2+"*"+Num4m);<br/> res1.push(kArray1/Num4m);<br/> res2.push(kArray2+"/"+Num4m);<br/> res1.push(Num4m/kArray1);<br/> res2.push(Num4m+"/"+kArray2);<br/> }<br/> }<br/> }<br/> }<br/> }<br/> }<br/> }<br/> }<br/> }<br/> var retArray:Array = [];<br/> for (var m = 0; m<res2.length; m++) {<br/> //if (Number(res1)>=23.99 && Number(res1)<=24.01) {<br/> if (res1 == 24) {<br/> var ok:Boolean = true;<br/> for (var i = 0; i<retArray.length; i++) {<br/> if ((res2+"="+res1) == retArray) {<br/> ok = false;<br/> }<br/> }<br/> if (ok) {<br/> retArray.push(res2+"="+res1);<br/> }<br/> }<br/> }<br/> return retArray;<br/>}<br/>//计算字串表达式的值<br/>//参数:字串计算表达式,只能有数字(可以是小数和负数),+ - * / ( )等符号,自动忽略空格。<br/>function evalString(表达式:String):Number {<br/> //删除字串中的空格<br/> var i = 0;<br/> while (true) {<br/> i = 表达式.indexOf(" ", i);<br/> if (i == -1) {<br/> break;<br/> }<br/> 表达式 = 表达式.slice(0, i)+表达式.slice(i+1);<br/> }<br/> var 堆栈:Array = ["@"];<br/> //栈底标记"@"<br/> var a, b, c, d:String, Err:String = "ok";<br/> var _fh = 1;<br/> //正负号<br/> var posN = "";<br/> // 扫描表达式<br/> for (var i = 0; i<表达式.length; i++) {<br/> switch (表达式.charAt(i)) {<br/> case "(" :<br/> //左括号前面是数字,就插入乘号,否则就直接入栈。即左括号前的乘号可以省略。<br/> d = 表达式.charAt(i-1);<br/> if ((d>"0" && d<"9") || d == ")") {<br/> 堆栈.push("*");<br/> }<br/> 堆栈.push(表达式.charAt(i));<br/> break;<br/> case ")" :<br/> //右括号则退栈计算,直到遇见一个左括号<br/> b = 堆栈.pop();<br/> c = 堆栈.pop();<br/> a = 堆栈.pop();<br/> if (堆栈.pop() == "(") {<br/> 堆栈.push(计算两数(a, c, b));<br/> } else {<br/> //请拖动“组件”Alert到舞台上,然后删除,它就出现在库中了<br/> //这样才能利用下面的弹出提示信息窗口。<br/> mx.controls.Alert.show("括号不匹配!", "表达式错误");<br/> return Number("");<br/> }<br/> break;<br/> case "*" :<br/> case "/" :<br/> //如果前一个运算符为*或/,则退栈计算,再入栈,否则直接入栈 <br/> d = 堆栈[堆栈.length-2];<br/> if (d == "*" || d == "/") {<br/> b = 堆栈.pop();<br/> c = 堆栈.pop();<br/> a = 堆栈.pop();<br/> 堆栈.push(计算两数(a, c, b));<br/> }<br/> 堆栈.push(表达式.charAt(i));<br/> break;<br/> case "-" :<br/> //判断是减号?还是负号?<br/> d = 表达式.charAt(i-1);<br/> if (i == 0 || d == "(" || d == "/" || d == "*") {<br/> _fh = -1;<br/> break;<br/> }<br/> case "+" :<br/> //如果前一个运算符不是左括号也不是栈底,则退栈计算,再入栈 <br/> d = 堆栈[堆栈.length-2];<br/> if (d != "(" && d != "@") {<br/> b = 堆栈.pop();<br/> c = 堆栈.pop();<br/> a = 堆栈.pop();<br/> 堆栈.push(计算两数(a, c, b));<br/> }<br/> 堆栈.push(表达式.charAt(i));<br/> break;<br/> default :<br/> //如果是数字字符或者小数点则转化为数字<br/> posN += 表达式.charAt(i);<br/> //如果下一个字符是运算符则把当前数字压入栈中<br/> d = 表达式.charAt(i+1);<br/> if (!(d != "." && (d>"9" || d<"0"))) {<br/> break;<br/> }<br/> 堆栈.push(parseFloat(posN)*_fh);<br/> posN = "";<br/> _fh = 1;<br/> }<br/> }<br/> //扫描完毕,计算栈中乘下数据<br/> do {<br/> b = 堆栈.pop();<br/> c = 堆栈.pop();<br/> a = 堆栈.pop();<br/> 堆栈.push(计算两数(a, c, b));<br/> } while (堆栈.length>3);<br/> var ret = Number(堆栈.pop());<br/> if (Err == "除数为零") {<br/> mx.controls.Alert.show("除数为零!", "错误:");<br/> } else if (堆栈.pop() != "@" || isNaN(ret)) {<br/> mx.controls.Alert.show("请检查计算表达式!", "错误:");<br/> }<br/> //返回结果 <br/> return ret;<br/> //计算两个数<br/> function 计算两数(a, 运算符, b):Number {<br/> var ret = 0;<br/> if (运算符 == "+") {<br/> ret = a+b;<br/> } else if (运算符 == "-") {<br/> ret = a-b;<br/> } else if (运算符 == "*") {<br/> ret = a*b;<br/> } else if (运算符 == "/") {<br/> if (!b) {<br/> Err = "除数为零";<br/> return Number("");<br/> } else {<br/> ret = a/b;<br/> }<br/> }<br/> return ret;<br/> }<br/>}<br/> <p>不是我写的,仅仅只是看的懂一部分,,感谢网友<a href="http://space.flash8.net/bbs/profile-uid-409182.html">ybzjllj</a>
</p> <p>有几段素废的。。还可以再简洁一点。。。</p> <p>4个数算24</p><p>貌似大二的时候用C写过,递归一下,用不了几行</p> <p></p><p>真长啊....</p><p>没有特别需要的话...</p><p>用basic不是更简洁?</p> 额。。。。。。 伤脑筋啊 (5-1/5)*5=24 传说中的算牌器
页:
[1]