weixin_41244451 2024-06-16 20:30 采纳率: 93.9%
浏览 0
已结题

请看仔细上面的逻辑,不是简单的result >= 10 && result <= 99


do {
                if(type==3)//1-9直加直减
                {
                    number = Math.floor(Math.random() * 9) + 1; // 1-9的随机数
                    operator = operators[Math.floor(Math.random() * 2)];
 
                    if (operator === '+') {//当做加法时
                        if((result>4 && result<9) || result===0)//当上一个结果是05~8时,与下一个数的和<=9
                        {
                            validNumber = result + number <= 9;
                        }
                        else if(result===9)//当上一个结果是9时,跳过
                        {
                            validNumber = false;
                        }
                        else//当上一个结果是1~4时,与下一个数的和<=4
                        {
                            validNumber = result + number <= 4;
                        }
                    }else{//当做减法时
                        if(result===5)//当上一个结果是5时,与下一个数的差=0
                        {
                            validNumber = result - number == 0;
                        }
                        else if(result===6)//当上一个结果是6时,与下一个数的差是015
                        {
                            validNumber = result - number == 0 || result - number == 1 || result - number == 5;
                        }
                        else if(result===7)//当上一个结果是7时,与下一个数的差是0~256
                        {
                            validNumber = (result - number >= 0 && result - number <= 2) || result - number == 5 || result - number == 6;
                        }
                        else if(result===8)//当上一个结果是8时,与下一个数的差是0~35~7
                        {
                            validNumber = (result - number >= 0 && result - number <= 3) || (result - number >= 5 && result - number <= 7);
                        }
                        else if(result===9)//当上一个结果是9时,与下一个数的差是0~8
                        {
                            validNumber = result - number >= 0 && result - number <= 8;
                        }
                        else//当上一个结果是0~4时,与下一个数的差是>=0
                        {
                            validNumber = result - number >= 0;
                        }
                    }
                }
} while (!validNumber);

上面是一位数的随机加减法的逻辑判断,现在我想弄一个两位数的随机加减法,这两位数如果把个位和十位单独来判断,那么逻辑判断与上面的一位数加减法逻辑判断是一样的,请看仔细上面的逻辑,不是简单的result >= 10 && result <= 99

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-16 20:30
    关注

    引自免费微信小程序:皆我百晓生

    要实现两位数的随机加减法,并保持与一位数加减法相同的逻辑复杂度,我们首先需要理解原逻辑的核心:确保每次操作后的结果都落在一个特定的范围内,这个范围依赖于当前的操作数和操作类型(加法或减法)。对于两位数的情况,我们可以将这个逻辑扩展到十位和个位分别进行判断,最终合并结果。

    解决方案概述

    1. 生成两位数:先生成一个在10到99之间的随机数。
    2. 生成操作符:随机选择加号或减号。
    3. 生成第二个操作数:生成一个1到9之间的随机数,用于操作。
    4. 逻辑判断:根据原逻辑,分别对十位和个位进行判断,确保操作后的新数字的十位和个位都符合要求。
    5. 合并结果:将两个独立的判断结果合并为一个新的两位数。

    代码实现

    下面是一个可能的实现方式,这段代码将遵循上述步骤,确保生成的表达式满足给定的条件:

    function generateTwoDigitExpression() {
        let result, number, operator, validNumber = false;
    
        do {
            result = Math.floor(Math.random() * 90) + 10; // 生成10到99之间的随机数
            number = Math.floor(Math.random() * 9) + 1; // 生成1到9之间的随机数
            operator = ['+', '-'][Math.floor(Math.random() * 2)]; // 随机选择加号或减号
    
            // 分离十位和个位
            const tens = Math.floor(result / 10);
            const ones = result % 10;
    
            // 十位的逻辑判断
            let validTens = false;
            if (tens === 9) { // 当前十位为9
                validTens = operator === '-' && (result - number) / 10 === 8;
            } else if (tens < 5) { // 当前十位小于5
                validTens = result + number <= 49 || result - number >= 10;
            } else { // 当前十位大于等于5且小于9
                validTens = result + number <= 99 || result - number >= 10;
            }
    
            // 个位的逻辑判断
            let validOnes = false;
            if (operator === '+') {
                validOnes = result + number <= 99;
            } else { // 减法
                validOnes = result - number >= 0;
            }
    
            // 合并判断结果
            validNumber = validTens && validOnes;
        } while (!validNumber);
    
        return `${result} ${operator} ${number}`;
    }
    
    console.log(generateTwoDigitExpression());
    

    这段代码的关键在于将十位和个位分开处理,然后通过逻辑判断合并结果,以确保最终生成的表达式的合法性。注意,这里的逻辑简化了一些复杂的条件分支,以适应两位数的场景。根据具体需求,可能需要进一步调整和优化。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(3条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 6月16日
  • 已采纳回答 6月16日
  • 创建了问题 6月16日

悬赏问题

  • ¥15 vue请求不到数据,返回状态200,数据为html
  • ¥15 访问url时不会自动调用其 Servlet的doGet()
  • ¥15 用白鹭引擎开发棋牌游戏的前端为什么这么难找
  • ¥15 MATLAB解决问题
  • ¥35 哪位专业人士知道这是什么原件吗?哪里可以买到?
  • ¥15 关于#c##的问题:treenode反序列化后获取不到上一节点和下一节点,Fullpath和Handle报错
  • ¥15 一部手机能否同时用不同的app进入不同的直播间?
  • ¥20 输入import torch显示Intel MKL FATAL ERROR,系统驱动1%,: Cannot load mkl_intel_thread.dll.
  • ¥15 点云密度大则包围盒小
  • ¥15 nginx使用nfs进行服务器的数据共享