当前位置: 代码迷 >> JavaScript >> 史上最牛的JS,不是高手勿留言,该如何处理
  详细解决方案

史上最牛的JS,不是高手勿留言,该如何处理

热度:134   发布时间:2012-02-23 22:01:34.0
史上最牛的JS,不是高手勿留言

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> 
  相关解决方案