在一定规则下动态创建数组

2024-03-12

我需要创建具有遵循这些模式的某些值/属性的数组。

不幸的是,我的数学知识不允许我找到规律。

以下是应在(从下到上)n = 1、2 和 3 处输出的数组示例(计算每条边上的红色框)。

所有红色和绿色方块都应该分配一些值,而所有白色方块都需要未定义(或空、空等)。

创建数组,如何动态分配它们各自的红/绿/白值?

    for (var x = 0; x < n * 4 - 1; x++)
    {
        for (var y = 0; y < n * 4 - 1; y++)
        {
            board[x][y] = green, red or white?;
        }
    }

PS:如果不明显,该图案会创建“红色”边长为的六边形n.


每个六边形都由三部分组成(从上到下):

  1. 上半部分以覆盖整个宽度的绿线终止

  2. 一条红色方格线

  3. 下半部分以一条覆盖整个宽度的绿线开始

上半部和下半部是它们自身的镜像,反射在 2 中的线上。

对于给定的n,总行数为2n - 1 + 2n. The 2 n - 1术语是由于红线:有2 n其中两个(最长的)是一个叠在一起的。这2 n术语是由于绿线(它是红线的数量 + 1)。

下面是绘制上半部分的 Python 代码(开头的第 1 项):

def print_hex_upper_half(n):
    num_lines = 2 * (n - 1) + 1
    width = (2 * n - 1) + 2 * n
    for i in range(1, num_lines + 1):
        if i % 2 == 1:
            s = n - i / 2 - 1
            print ' ' * s + 'G' * (width - 2 * s) + ' ' * s
        else:
            s = n - i / 2 + 1
            rw = (width - 2 * s + 1) / 2
            print ' ' * s + ' '.join('R' * rw) + ' ' * s

这是运行时的情况:

>>> print_hex_upper_half(4)
   GGGGGGGGG   
    R R R R    
  GGGGGGGGGGG  
   R R R R R   
 GGGGGGGGGGGGG 
  R R R R R R  
GGGGGGGGGGGGGGG

>>> print_hex_upper_half(3)
  GGGGGGG  
   R R R   
 GGGGGGGGG 
  R R R R  
GGGGGGGGGGG

>>> print_hex_upper_half(2)
 GGGGG 
  R R  
GGGGGGG

>>> print_hex_upper_half(1)
GGG

中间的线很简单,下半部分是反射,因此只需操纵指数即可。

下面是代码的详细解释:

  • 由于上述原因,上半部分的行数为2 (n - 1) + 1,宽度已在上面给出。

  • 奇数行为绿色,偶数行为红色。

  • 出于与上述相同的原因,绿行以以下内容开始和结束:n - i / 2 - 1空间。其余的是绿色的。

  • 同样,出于与上面给出的相同原因,红行以我/2+1空间。其余部分为红色,中间散布着空格。如果我们从宽度中减去这个值,加 1,然后除以 2,我们就得到了红色块的数量。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在一定规则下动态创建数组 的相关文章

  • 不分配内存的重复排列

    我正在寻找一种算法来生成列表中重复 4 个元素 长度 2 1000 的所有排列 Java实现 http en literateprograms org Permutations with repetition 28Java 29 问题是上面
  • 帮助我在 Python 中实现反向传播

    EDIT2 新的训练集 Inputs 0 0 0 0 0 0 1 0 0 0 2 0 0 0 3 0 0 0 4 0 1 0 0 0 1 0 1 0 1 0 2 0 1 0 3 0 1 0 4 0 2 0 0 0 2 0 1 0 2 0 2
  • 集合划分比差分获得更好的结果

    分区问题 https en wikipedia org wiki Partition problem已知是 NP 困难的 根据问题的特定实例 我们可以尝试动态规划或一些启发式方法 例如差分法 也称为 Karmarkar Karp 算法 后者
  • 对 Big O 表示法仍然有点困惑

    所以我一直在尽力理解 Big O 表示法 但仍然有一些事情我感到困惑 所以我一直读到如果某件事是 O n 那么它usually指的是算法的最坏情况 但它不一定要指最坏的情况 这就是为什么我们可以说插入排序的最佳情况是 O n 但是 我无法真
  • Big O 用于有限、固定大小的可能值集

    这个问题 https stackoverflow com questions 12305028 java what is the best way to find first duplicate character in a string引
  • 自动适合衣服的算法?

    想象一下 客户要求您设计一款软件 以满足一些相当粗略的规格 如下所示 1 它将面向时尚行业营销 2 用户将是 设计衣服和东西 的人 可能有一个特定的术语 但我没有想到 3 由于各种原因 能够快速制作原型设计并查看它们在模型上的外观会很有用
  • 天气预报算法多样

    目前 英国气象局的预测引发了一场巨大的 风暴 他们预测冬季将是温和 潮湿的冬季 而北爱尔兰的气温却是有记录以来最冷的 地面上有厚厚的积雪 这在 12 月通常很少见 这是我很想尝试的东西 并不是我声称我可以击败他们 而是想知道人们目前正在使用
  • Kamada 和 Kawai 图形布局算法? [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 有人尝试过 Kamada Kawai 的 88 算法来绘制一般无向图吗 如果是这样 并且您知道其中的任
  • 零填充缓冲区/文件的 CRC32 计算

    如果我想计算大量连续零字节的 CRC32 值 在给定零运行长度的情况下 是否可以使用恒定时间公式 例如 如果我知道我有 1000 个字节全部用零填充 有没有办法避免 1000 次迭代的循环 只是一个例子 对于这个问题 实际的零数量是无限的
  • 最近点对算法

    我目前正在致力于用 C 实现最接近的点对算法 也就是说 给定一个点列表 x y 找到具有最小欧氏距离的点对 我对此进行了研究 我对算法的理解如下 如果我错了 请纠正我 将点数组从中间拆分 递归地找到左半部分和右半部分距离最小的点对 按 y
  • 我怎样才能找到圆的所有点? [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 给定半径和圆心坐标 如何找到圆的所有
  • 在 C 中打印字符串的所有排列

    我正在学习回溯和递归 并且我陷入了打印字符串所有排列的算法 我用以下方法解决了它贝尔算法 http programminggeeks com bell algorithm for permutation 用于排列 但我无法理解递归方法 我在
  • 计算标签云中标签字体大小的公式是什么?

    我有一个标签云 我需要知道如何更改最常用标签的字体大小 我需要设置最小字体大小和最大字体大小 您可以使用线性或对数评估与某个标签相对于最大标签关联的项目数量 将其乘以最小和最大字体大小之间的差值 然后将其添加到最小字体大小 例如 伪代码中的
  • 用 ruby​​ 解决旅行商问题(50 多个位置)

    我在一家快递公司工作 目前 我们 手动 解决了 50 多个地点的路线 我一直在考虑使用 Google Maps API 来解决这个问题 但我读到有 24 点的限制 目前我们在服务器中使用 Rails 因此我正在考虑使用 ruby 脚本来获取
  • 二进制字符串到十进制字符串

    下午好 如何将字符数多于语言最大整数类型中位数的二进制字符串转换为十进制字符串 换句话说 假设你有字符串 111001101001110100100 1001001111011100100 并且您不能先将其转换为整数 那么您将如何以 10
  • 获取无平方数的列表

    获得该值的一种方法是自然数 1 n 我们对每个因子进行因式分解 看看它们是否有重复的质因数 但这对于大的情况来说会花费很多时间n 那么有没有更好的方法从 1 中获取无平方数n 您可以使用埃拉托斯特尼筛法的修改版本 取一个布尔数组 1 n 预
  • 4 x 3 锁图案

    我遇到了这个 它要求计算在 4x3 网格中可以制作特定长度的锁定图案的方式数 并遵循规则 可能有些点不能包含在路径中 有效的模式具有以下属性 图案可以使用第一次接触的点序列来表示 与绘制图案的顺序相同 从 1 1 到 2 2 的图案与图案不
  • Bellman-Ford 算法检测什么?负重还是负循环?

    如果给定一个图 现在我们要从源头计算最短路径 现在 如果一条边具有负权重 但在到达目的地时有边到后边返回到该边 我的意思是如果没有循环 那么我们就没有负循环 但是here http en wikipedia org wiki Bellman
  • 两个非嵌套循环的大 O 表示法

    对于两个非嵌套的 for 循环 大 O 表示法是什么 Example for int i 0 i
  • 如何在Scala中实现尾递归快速排序

    我写了一个递归版本 def quickSort T xs List T p T T gt Boolean List T xs match case Nil gt Nil case gt val x xs head val left righ

随机推荐