- HTML code
<html> <head> <script> </script> </head> <body> 条件A:<INPUT type="text" name="a" size="5"> 条件B:<INPUT type="text" name="b" size="5"> <br> <br> <button onclick="func()">开始并计算</button> <br> <br> 结果:<INPUT type="text" name="c"> </body> </html>
写一个函数func(),能完成以下要求:
要求:1、点击“开始并计算”按钮在“结果”文本框中生成一个随机的四位数字,其中数字不能重复,范围0~9皆可。如:0357、5690、1234。
2、心里想一个四位数字,与“结果”文本框返回的数字做对比,找出数字和位置都正确的总数填入条件A(人工填入),数字正确但位置不正确的总数填入条件B(人工填入)。如:“结果” 文本框返回的数字为“1234”,我心里的数字为“5213”,则条件A应该填入1,条件B应该填入2。
3、填入条件后点击“开始并计算”按钮,通过算法重新得到结果,并写入“结果文本框”。
4、重复填入条件A、B并点击“开始并计算”按钮,直到“结果”文本框的内容和心里想的那个四位数字完全一样。
5、点击按钮超过11次(不包括11次),该程序便宣告失败,反之,则成功并获得CSDN得分。
如不能理解请,可参见百度:“文曲星猜数字”。
最后:如果您不能设计出程序或提出思路,请勿留言,谢谢配合。
------解决方案--------------------
有点小问题,修改了一下。
- HTML code
<html> <body> <FORM METHOD=POST ACTION="" name="form1"> <button onclick="return func();">开始并计算</button> <br> <br> 我猜:<INPUT type="text" name="c"> 条件A:<INPUT type="text" name="a" size="5"> 条件B:<INPUT type="text" name="b" size="5"> 你的数字是:<INPUT type="text" name="d"> </FORM> </body> </html> <SCRIPT LANGUAGE="JavaScript"> <!-- var total = 0; var isValid = new Array(5040); for(var i=0;i<isValid.length;i++) { isValid[i]='true'; } var nums = new Array(5040 * 4); var pos = 0; //5040 * 4数组中的位置 var a, b, c, d; for (var aa = 0; aa < 10; aa++) { for (var bb = 0; bb < 10; bb++) { if (aa != bb) { for (var cc = 0; cc < 10; cc++) { if (aa!= cc && bb!= cc) { for (var dd = 0; dd < 10; dd++) { if (aa != dd && bb != dd && cc != dd) { nums[pos++] = aa; nums[pos++] = bb; nums[pos++] = cc; nums[pos++] = dd; } } } } } } } //form1.c.value = getgetNextSeed(); function func() { total++ var acount =form1.a.value; var bcount = form1.b.value; if(total>1) setGuessReuslt(acount, bcount); var guestNum = getgetNextSeed(); if(guestNum==true || acount==4) { alert("看,我猜对了吧,服不服,哈哈哈!!!"); if(acount==4) form1.d.value=form1.c.value; return true; } else { form1.c.value=guestNum; alert("第"+total+"次,我猜:"+guestNum); } } function setGuessReuslt(x,y) { if (x == 4) { return; } for (var pos = 0; pos < 5040; pos++) { if (isValid[pos]) { var numspos = pos * 4; if (getMyX(pos) != x) { isValid[pos] = false; continue; } if (getMyY(pos) != y) { isValid[pos] = false; continue; } } } } function getMyX(pos) { var myx = 0; pos *= 4; if (nums[pos++] == a) myx++; if (nums[pos++] == b) myx++; if (nums[pos++] == c) myx++; if (nums[pos++] == d) myx++; return myx; } function getMyY(pos) { var myy = 0; pos *= 4; if (nums[pos] == b || nums[pos] == c || nums[pos] == d) myy++; if (nums[pos + 1] == a || nums[pos + 1] == c || nums[pos + 1] == d) myy++; if (nums[pos + 2] == a || nums[pos + 2] == b || nums[pos + 2] == d) myy++; if (nums[pos + 3] == a || nums[pos + 3] == b || nums[pos + 3] == c) myy++; return myy; } function getgetNextSeed() { var others = 0; var pos = 0; for (var i = 0; i < 5040; i++) { if (isValid[i]) { if (others > 0) { others++; break; } else { others++; pos = i; } } } if (others == 0) { alert("你是个赖皮狗,前面你回答错了,查查吧"); return false; } if (others == 1) { var i = pos * 4; alert("我猜这个数一定是" + nums[i++] + nums[i++] + nums[i++] + nums[i++]) form1.d.value=""+nums[i++] + nums[i++] + nums[i++] + nums[i++]; return true; } for (var i = 0; i < 5040; i++) { if (isValid[i]) { i =i*4; a = nums[i]; b = nums[i + 1]; c = nums[i + 2]; d = nums[i + 3]; return (""+ nums[i++] + nums[i++] + nums[i++] + nums[i++]); } } } //--> </SCRIPT>