前端面试:精选经典面试题(二十五)

需求

前端面试:精选经典面试题(二十四)
模拟文曲星上的猜字游戏,实现猜数算法,游戏开始后,系统会随机给出四个不重复的数字,由用户输入自己猜测的四个数字。
1. 如果数字猜对而且位置也对,就是1个A
2. 如果数字猜对但位置不对,就是1个B
3. 返回结果是如“2A1B”这样的字符
4. 猜错6次,游戏提示结束,重来

如:
随机数为2222,用户输入2223,结果为3A0B
随机数为5324,用户输入7352,结果为1A2B
假设:
获取系统随机数的方法叫getRendomNum():int
获取用户输入数字的方法叫做getUserNum():int
请实现猜数算法guess(int num):string?

代码实现

<script>
var count = 0;
var ttyOutput = [];
var arr1 = [0,1,2,3,4,5,6,7,8,9];
var score = {a:0,b:0};//用于记录分数

function getRandomNum(){
    var num = 0;
    for(var i=0;i<4;i++){
        num = parseInt(Math.random()*10);
        if(arr1[num]){
            ttyOutput.push(arr1[num]);
            arr1.splice(num,1);
        }
    }
}

function getUserNum(){
    var userInput = prompt("请输入四个数字");
    //验证合法性
    checkInput(userInput);
}

function checkInput(userInput){
    var index = -1;
    for(var i=0;i<userInput.length;i++){
        index = userInput[i].indexOf(ttyOutput);
        if(index != -1){
            if(userInput[i] == ttyOutput[i]){
                score.a++;
            }else{
                score.b++;
            }
        }
    }
    if(score.a!=4){
        alert("你的结果是"+"A"+score.a+"B"+score.b);
        init();
    }
}


function init(){
    count++;
    if(count>6){
        if(confirm("游戏结束,再来!!")){
            count = 0;
            arr1 = [0,1,2,3,4,5,6,7,8,9];
            init();
        }
        return false;
    }   
    getRandomNum();
    getUserNum();
}
</script>     

这道题的变种

写一个函数来判断传入的两个数组是否相似。具体需求:

当以下全部满足,则返回true,否则返回false

  1. 数组中的成员类型相同,顺序可以不同。例如[1, true] 与 [false, 2]是相似的。
  2. 数组的长度一致。
  3. 类型的判断范围,需要区分:String, Boolean, Number, undefined, null, 函数,日期, window.

变种二

写一个函数判断两个对象结构相同。具体需求:

设参数分别为left, right, 当以下全部满足,则返回true,否则返回false

left, right必须是都是对象,否则返回false
left, right中得属性必须类型相同,否则返回false.
属性不存在时,算作类型相同。如left.a = 1, right.a不存在,则依然算通过。(实际数据返回有些属性可以不存在)
对于数组类型,只取第一个元素判断即可。若数组为空,不判断数组中的元素。
以上满足, 返回true

转载于:https://my.oschina.net/u/1792175/blog/598085

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值