weixin_41244451 2024-06-14 18:14 采纳率: 93.9%
浏览 1
已结题

结和上一个提问修改了一下,但是还是不行


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);

上面是一位数的随机加减法的逻辑判断,可以正常使用。
现在我想弄一个两位数的随机加减法,这两位数如果把个位和十位单独来判断,那么逻辑判断与一位数的随机加减法逻辑判断是一样的,结和上一个提问修改了一下,但是还是不行,修改如下:

 if(type==10)//两位数直加直减
                {
                    let numberTen = Math.floor(Math.random() * 9) + 1; // 随机生成十位数
                    let numberUnit = Math.floor(Math.random() * 9) + 1; // 随机生成个位数
                    number = numberTen * 10 + numberUnit;
                    let number_onesDigit=onesDigit(number);
                    let number_tensDigit=tensDigit(number);
                    operator = operators[Math.floor(Math.random() * 2)];

                    if (operator === '+') {
                        //个位
                        result_onesDigit += number_onesDigit;
                        if((result_onesDigit>4 && result_onesDigit<9) || result_onesDigit===0)
                        {
                            result_onesDigit = Math.min(9, result_onesDigit);
                        }
                        else if(result_onesDigit===9)
                        {
                            result_onesDigit = 0;
                        }
                        else
                        {
                            result_onesDigit = Math.min(4, result_onesDigit);
                        }
                        
                        //十位
                        result_tensDigit += number_tensDigit;
                        if((result_tensDigit>4 && result_tensDigit<9) || result_tensDigit===0)
                        {
                            result_tensDigit = Math.min(9, result_tensDigit);
                        }
                        else if(result_tensDigit===9)
                        {
                            result_tensDigit = 0;
                        }
                        else
                        {
                            result_tensDigit = Math.min(4, result_tensDigit);
                        }
                    }
                    else
                    {
                        //个位
                        result_onesDigit -= number_onesDigit;
                        if(result_onesDigit===5)
                        {
                            result_onesDigit = 0;
                        }
                        else if(result_onesDigit===6)
                        {
                            result_onesDigit = getRandomNumber([0,1,5]);
                        }
                        else if(result_onesDigit===7)
                        {
                            result_onesDigit = getRandomNumber([0,1,2,5,6]);
                        }
                        else if(result_onesDigit===8)
                        {
                            result_onesDigit = getRandomNumber([0,1,2,3,5,6,7]);
                        }
                        else if(result_onesDigit===9)
                        {
                            result_onesDigit = Math.min(8, result_onesDigit);
                        }
                        else
                        {
                            result_onesDigit = Math.max(0, result_onesDigit);
                        }
                        
                        //十位
                        result_tensDigit -= number_tensDigit;
                        if(result_tensDigit===5)
                        {
                            result_tensDigit = 0;
                        }
                        else if(result_tensDigit===6)
                        {
                            result_tensDigit = getRandomNumber([0,1,5]);
                        }
                        else if(result_tensDigit===7)
                        {
                            result_tensDigit = getRandomNumber([0,1,2,5,6]);
                        }
                        else if(result_tensDigit===8)
                        {
                            result_tensDigit = getRandomNumber([0,1,2,3,5,6,7]);
                        }
                        else if(result_tensDigit===9)
                        {
                            result_tensDigit = Math.min(8, result_tensDigit);
                        }
                        else
                        {
                            result_tensDigit = Math.max(0, result_tensDigit);
                        }
                    }
                    // 检查是否有效
                    validNumber = resultTen < 10 && resultUnit < 10;
                }
  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-06-14 18:14
    关注

    以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


    从您提供的代码和描述来看,您希望实现两位数的随机加减法,并且要保证结果符合特定的条件。首先,我们需要确保代码逻辑正确,并且能够处理两位数的加减法。以下是一些建议和代码示例,帮助您实现这一功能:

    1. 实现onesDigittensDigit函数: 这两个函数分别用来获取一个数字的个位和十位。

      function onesDigit(number) {
          return number % 10;
      }
      
      function tensDigit(number) {
          return Math.floor(number / 10);
      }
      
    2. 实现getRandomNumber函数: 这个函数用来从给定的数组中随机选择一个数字。

      function getRandomNumber(options) {
          return options[Math.floor(Math.random() * options.length)];
      }
      
    3. 修改逻辑以适应两位数的加减法: 您需要确保在加减法过程中,个位和十位的计算逻辑正确无误,并且符合您所描述的条件。

      // 假设resultTen和resultUnit分别存储结果的十位和个位
      let resultTen = Math.floor(result / 10); // 结果的十位
      let resultUnit = result % 10; // 结果的个位
      
      // 以下是加减法的逻辑,这里只展示加法的逻辑,减法类似
      if (operator === '+') {
          resultUnit += numberUnit; // 个位相加
          resultTen += numberTen; // 十位相加
      
          // 个位的逻辑处理
          if (resultUnit > 9) {
              resultUnit -= 10;
              resultTen += 1; // 进位
          }
      
          // 十位的逻辑处理
          if (resultTen > 9) {
              resultTen -= 10;
              // 这里可能需要更多的逻辑来处理进位
          }
      }
      
      // 将十位和个位重新组合成完整的结果
      result = resultTen * 10 + resultUnit;
      
    4. 确保结果有效: 在进行加减法后,您需要检查结果是否有效,例如是否超出了两位数的范围。

      function isValidResult(result) {
          return result >= 10 && result <= 99;
      }
      
      // 在循环中使用isValidResult来确保结果有效
      do {
          // ... 您的随机数生成和加减法逻辑
      } while (!isValidResult(result));
      

    请注意,以上代码仅为示例,您可能需要根据实际情况调整逻辑和条件。此外,确保您的代码中所有变量都已经正确定义,并且在使用它们之前已经初始化。

    关于参考资料,您可以查阅一些在线的JavaScript教程或者算法书籍,了解如何实现数字的位操作和随机数生成。这里没有特定的在线资源推荐,但您可以搜索相关的主题,例如“JavaScript 数字操作”或“JavaScript 随机数生成”。

    希望这些建议和代码示例对您有所帮助!如果您有任何具体的问题或需要进一步的帮助,请随时提问。

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

报告相同问题?

问题事件

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

悬赏问题

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