【问题标题】:How to convert this extensive Python loop to C++?如何将这个广泛的 Python 循环转换为 C++?
【发布时间】:2015-10-03 03:13:00
【问题描述】:

我对 Python 知之甚少,但我在 C++ 方面颇有经验。 我正在寻找一种算法,它可以循环遍历六边形模式中的点,并找到了一个用 Python 编写的算法,这似乎正是我所需要的。问题是我不知道如何解释它。

这是 Python 代码:

for x in [(n-abs(x-int(n/2))) for x in range(n)]:
    for y in range(n-x):
        print ' ',
    for y in range(x):
        print ' * ',
    print

我会向您展示我的尝试,但大约有 30 种不同的尝试都失败了(我敢肯定这只是我的错误解释)。

【问题讨论】:

  • 我投票结束这个问题,因为 Stack Overflow 不是代码转换服务。
  • StackOverflow 是一个可以寻求帮助的地方。这根本不是题外话。到目前为止,反复试验使我失败了,当发生这种情况时,我会来这里寻求帮助,学习。这是一个非常有效的问题,并且类似的转换问题得到了回答并且没有关闭。 [不过,我尊重你坦率地说出你为什么认为这是题外话,通常人们不会那样做。]
  • 该确切代码给出的控制台示例是一个有效的六边形。我没有使用 Python 的经验。
  • 就目前而言,该 exact 代码的缩进不正确......(在 c++ 中,这就像将 {} 放在错误的位置)......这可能是为什么你无法复制它。

标签: python c++ loops hexagonal-tiles


【解决方案1】:

希望这对您有所帮助。测试了 python 和 c++ 代码。得到了相同的结果。

#include <iostream>
#include <cmath> 

using namespace std;

int main() {
    // your code goes here
    int n = 10;
    int a[n];

    for(int j = 0; j < n; j++) {
       a[j] = n - abs(j - (n / 2)); 
    }

    for(int x = 0; x < n; x++) {
        for(int y = 0; y < (n - a[x]); y++) {
            std::cout << " " << std::endl;
        }
    }

    for(int k = 0; k < a[n-1]; k++) {
        std::cout << " * " << std::endl;
    }

    std::cout << "i" << std::endl;

    return 0;
}

【讨论】:

  • 这实际上与我尝试和失败的非常相似。我有点惊讶我有多接近。谢谢! (我目前无法对其进行测试,但我会继续标记它,因为它看起来很有希望。)
  • 你能告诉我“L”、“*”和“i”分别代表什么吗?
  • 我不明白这与我需要的答案有什么关系。这只会打印一堆 L 和 *,以及一个 i。
  • @CoreyIles 我只是将 ' ' 替换为 'L' 只是为了检查它出现了多少次。Python 代码水平打印 ' ' 之后打印 "*"。此代码与 Pyhton 代码的唯一区别水平打印,但 C++ 代码垂直打印。检查日志
【解决方案2】:
auto out = ostream_iterator<const char*>(cout," ");

for(int i = 0; i != n; ++i) {
    auto width = n - abs(i - n/2);
    fill_n(out, n-width, " ");
    fill_n(out, width, " * ");
    cout << "\n";
}

Live demo.

Python live demo 供参考。

【讨论】:

    猜你喜欢
    • 2021-03-07
    • 1970-01-01
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 2020-11-25
    相关资源
    最近更新 更多