【问题标题】:Is there a way to find the digit position in a recursion?有没有办法在递归中找到数字位置?
【发布时间】:2020-09-07 18:32:12
【问题描述】:

背景故事(对问题不重要):我的一门课上有一个问题,在过去的一周里我无法解决它,我就是这么坚持并试图为它找到一个好的解决方案,也许这只是我有限的想法,或者是对整个递归想法的新手,或者是学习我们正在使用的编程语言(C 语言)的新手。

问题:所以我们的任务是为给定的整数 num 构建一个“函数”(我不知道正确的词):

  • 如果数字在偶数索引中,则该位置的数字必须是偶数。
  • 如果数字在奇数索引中,则该位置的数字必须是奇数。
  • 索引从 0 开始。
  • 您只能使用 1 个参数 (num)
  • 条件满足则返回1,否则返回0(C语言)

例如: 数字 343,418 将是一个有效数字,因为奇数索引中的每个数字都是奇数,偶数索引中的每个数字都是偶数。(the example + indexes)

数字 343,518 将是一个无效数字,因为在第二个索引上有一个数字 5,偶数索引奇数。 (the example + indexes)

任何解决方案或解决方法的提示将不胜感激,因为我试图解决这个问题一段时间。

【问题讨论】:

  • 所以你想检查digit % 2 == index % 2。你试过什么?见How do I ask a good question?How to create a Minimal, Reproducible Example
  • 这正是我要检查的内容,很抱歉我没有这样指定。我确实尝试过遍历整个数字,总是将左边的数字删除 /= 10;问题是我总是丢失索引,并且我尝试过的各种方式都发现需要索引参数,尽管我只允许使用 num 参数。
  • 你对num < 0有什么期望?
  • 递归在哪里?

标签: c recursion


【解决方案1】:

这是一种可能的方法:

  1. 由于一个(最低有效)数字必须是偶数,因此作为一个整体考虑的有效数字也必须是偶数。如果num % 2 != 0,则停止并返回0。

  2. 通过tens = (num / 10) % 10 获取十位数字,利用整数除法向下舍入。如果tens 为零,我们就完成了对数字的验证,所以如果tens == 0 则返回1。否则tens 必须是奇数,所以如果tens % 2 == 0 则返回0。

  3. 现在用num /= 100 丢弃最后两位数字并返回到步骤1。

“回到第 1 步”部分可以使用 while 循环来完成,如果您想递归地表达它,也可以使用“tail call”。

【讨论】:

    【解决方案2】:

    正如 cmets 中的讨论所建议的,这里的想法是迭代数字并随时跟踪索引,在每个步骤中,您都会比较数字和索引的均匀度:

    int compareDigitsToIndexes(int num) {
        int ind = 0;
        while (num > 0) {
            int digit = num % 10;
            if (ind % 2 != digit % 2) {
                return 0;
            }
            num /= 10;
            ++ind;
        }
        return 1;
    }
    

    【讨论】:

      猜你喜欢
      • 2019-07-04
      • 1970-01-01
      • 2020-02-22
      • 2018-07-30
      • 2016-08-08
      • 2020-05-28
      • 1970-01-01
      • 2011-10-11
      • 2019-09-10
      相关资源
      最近更新 更多