RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 1072139
Accepted
KotFind
KotFind
Asked:2020-01-20 22:40:03 +0000 UTC2020-01-20 22:40:03 +0000 UTC 2020-01-20 22:40:03 +0000 UTC

多个整数值的无限迭代

  • 772

假设我想无限循环遍历多个整数值,直到找到合适的组合。如果只有一个值,那么这很容易:我们只需使用 while 循环遍历该值。如果有多个这些值怎么办?PS我认为它可以用BFS完成,但没有更简单的方法吗?

UPD:例如,我有一个整数变量 a 和一个 check(int a) 函数,如果该值匹配则返回 true。在这种情况下,您可以像这样遍历所有值:

int a = 0;
while(!check(a) && !check(-a)) {
    ++a;
}

如果我有整数变量 a、b 和函数 check(int a, int b) 怎么办?如何迭代?

алгоритм
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Best Answer
    Xander
    2020-01-21T00:48:15Z2020-01-21T00:48:15Z

    伪代码:

    M = 0
    
    Повторять:
        для a от 0 до M:
            b = M
            Проверить (a, b)
        для b от 0 до (M-1)
            a = M
            Проверить (a, b)
        M = M + 1
    

    也就是说,它类似于您编写的内容:

    Т.е. (для двух значений) мы предполагаем, что находимся на клетчатом поле в клетке (0, 0) потом рассматриваем соседние для этой клетки клетки, потом соседние для соседей и т.д. Но этот способ мне не очень нравится. Ему нужно достаточно много дополнительной памяти, да и код некрасивым будет.
    

    只有在我的版本中,没有必要存储单元列表并查找它们的邻居,因为邻居的每次迭代都将是正方形上方和右侧的一条单元格,每次迭代都会增加 1。

    对于两个以上的变量,原理相同,只是代码稍微复杂一些。

    UPD:我意识到你可以让它变得更容易:

    S = 0
    Повторять:
        для a от 0 до S:
            b = S - a
            Проверить (a, b)
        S = S + 1
    
    • 3
  2. Lexx918
    2020-01-21T17:24:53Z2020-01-21T17:24:53Z

    当您迭代一个变量的值时,您只需沿着 OX 轴从零向正值移动到无穷大。而且这个没有问题,拿去整理一下。

    现在您需要遍历两个数字。那些。以某种方式同时沿两个坐标轴“绘制”整个检查区域。如何在其上绘画取决于您,但如果您需要简单枚举“前额”中的所有选项,那么仅沿一个轴移动是行不通的:它是无限的。因此,您可以尝试通过填充从角度 0,0 到角度 + infinity_in_X、+ infinity_in_Y 的所有内容来沿对角线移动。

    您的算法将采用的路径如下图所示:

    解决方案的图形表示

    例如,代码本身(我在 php 中的示例)可以是这样的(在 dir 变量中 - 运动方向 - 朝向轴a或朝向轴b,其余部分很清楚等等):

    const DIR_A = 0;
    const DIR_B = 1;
    
    $a = 0;
    $b = 0;
    $dir = DIR_A;
    
    $dots = [];
    while (count($dots) < 16) {
        $dots[] = [$a, $b];
        if ($dir === DIR_A) {
            if ($b > 0) {
                $b--;
                $a++;
            } else {
                $a++;
                $dir = DIR_B;
            }
        } else {
            if ($a > 0) {
                $a--;
                $b++;
            } else {
                $b++;
                $dir = DIR_A;
            }
        }
    }
    
    foreach ($dots as $dot) {
        echo "[{$dot[0]}, {$dot[1]}], ";
    }
    echo "...\n";
    

    结果,这是输出:

    [0, 0], [1, 0], [0, 1], [0, 2], [1, 1], [2, 0], [3, 0], [2, 1], [1, 2], [0, 3], [0, 4], [1, 3], [2, 2], [3, 1], [4, 0], [5, 0], ...
    
    • 2
  3. Жека Диулин
    2020-01-20T23:21:29Z2020-01-20T23:21:29Z

    好吧,如果你想迭代几个值以寻找它们的合适组合,那么......呃......你可以在循环中做一个循环吗?!

    bool isFound = false;
    
    for (int a = start; a < end; a++) {
      for (int b = start; b < end; b++) {
        ...
          if (check(a, b, ..., n)) {
            // Сохрани найденные значения
            isFound = true;
            break;
          }
        ...
        if (isFound) break;
      }
      if (isFound) break;
    }
    

    只是不要去无穷大!有点长。。。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    如何从列表中打印最大元素(str 类型)的长度?

    • 2 个回答
  • Marko Smith

    如何在 PyQT5 中清除 QFrame 的内容

    • 1 个回答
  • Marko Smith

    如何将具有特定字符的字符串拆分为两个不同的列表?

    • 2 个回答
  • Marko Smith

    导航栏活动元素

    • 1 个回答
  • Marko Smith

    是否可以将文本放入数组中?[关闭]

    • 1 个回答
  • Marko Smith

    如何一次用多个分隔符拆分字符串?

    • 1 个回答
  • Marko Smith

    如何通过 ClassPath 创建 InputStream?

    • 2 个回答
  • Marko Smith

    在一个查询中连接多个表

    • 1 个回答
  • Marko Smith

    对列表列表中的所有值求和

    • 3 个回答
  • Marko Smith

    如何对齐 string.Format 中的列?

    • 1 个回答
  • Martin Hope
    Alexandr_TT 2020年新年大赛! 2020-12-20 18:20:21 +0000 UTC
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5