双回路用于交替C++

Double for loop for alternation C++

本文关键字:C++ 用于 回路      更新时间:2023-10-16

我应该如何在双 for 循环中生成这样的东西?这样输出将变成类似

O O O O O O O O O
O 1 O 1 O 1 O 1 O
O O O O O O O O O 
O 1 O 1 O 1 O 1 O
O O O O O O O O O 
O 1 O 1 O 1 O 1 O
O O O O O O O O O 
O 1 O 1 O 1 O 1 O
O O O O O O O O O 

我的尝试如下:

for (int i = 0; i < 8; i++)
{
    for (int j = 0; j < 8; j++)
    {
        //Insert code here
        if (j % 2 == 0)
        {
            array[b][a] = 0;
        }
        else if (i % 2 == 0 )
        {
            array[b][a] = 1;
        }
    }
}

我确实知道涉及 %,但我只是无法在这里获得逻辑,以至于 2d 数组的一角都是 0,有人可以指导我完成吗?

首先要做的最重要的事情是确定模式!

当我查看该输出时,我看到的模式是,当行和列都有奇数索引时,输出是1的。否则,数组具有0

请注意,写下来不涉及代码。这只是用简单的英语写的事实。首先做到这一点非常重要。

我们如何确定一个数字是否奇数?

如果x % 2 == 1,则数字x是奇数。

因此,让我们编写一些代码:

bool isOdd(int x) {
    return x % 2 == 1;
}
void work() {
    int array[9][9];
    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            if (isOdd(i) && isOdd(j))
                array[i][j] = 1;
            else
                array[i][j] = 0;
        }
    }
}
for (int i=0; i<9; i++) {
    for (int j=0; j<9; j++) {
        array[i][j] = ((j%2 && i%2)?1:0);
    }
}
例如,

您可以通过以下方式执行此操作

#include <iostream>
int main() 
{
    const size_t N = 9;
    int a[N][N];
    for ( size_t i = 0; i < N; i++ )
    {
        for ( size_t j = 0; j < N; j++ ) a[i][j] = i % 2 + j % 2 == 2;
    }
    for ( auto &row : a )
    {
        for ( int x : row ) std::cout << x << ' ';
        std::cout << std::endl;
    }
    return 0;
}

输出为

0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 
0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 
0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 
0 0 0 0 0 0 0 0 0 
0 1 0 1 0 1 0 1 0 
0 0 0 0 0 0 0 0 0 

或者你可以用零初始化数组,例如

int a[N][N] = {};

然后循环仅填充数组的奇数行。

例如

#include <iostream>
int main() 
{
    const size_t N = 9;
    int a[N][N] = {};
    for ( size_t i = 1; i < N; i += 2 )
    {
        for ( size_t j = 0; j < N; j++ ) a[i][j] = j % 2;
    }
    for ( auto &row : a )
    {
        for ( int x : row ) std::cout << x << ' ';
        std::cout << std::endl;
    }
    return 0;
}

程序输出将与上面显示的相同。

或者你可以简单地在循环中使用奇数行和列来编写。

#include <iostream>
int main() 
{
    const size_t N = 9;
    int a[N][N] = {};
    for ( size_t i = 1; i < N; i += 2 )
    {
        for ( size_t j = 1; j < N; j += 2 ) a[i][j] = 1;
    }
    for ( auto &row : a )
    {
        for ( int x : row ) std::cout << x << ' ';
        std::cout << std::endl;
    }
    return 0;
}

您希望列索引为奇数,行索引为奇数,因此二维数组中1的正确条件为:

(i%2==1) && (j%2==1)

解决大问题的一般方法是将它们分解成小问题。


习题1

您有两个功能:

  • print_zeroes打印000000000
  • print_zeroes_and_ones打印010101010

编写一个交替调用这些函数的循环,以便打印所需的网格。


习题2

将函数编写print_zeroes


习题3

将函数编写print_zeroes_and_ones


额外积分

  • 编写一个函数print_a_line,该函数接受参数并在执行print_zeroesprints_zeroes_and_ones之间进行选择
  • 编写一个使用 print_a_line 打印网格的循环。
  • 手动内联函数(即用函数代码替换函数调用)并尝试简化它。