用于交替C ++的双循环

时间:2015-03-15 18:40:16

标签: c++ arrays math for-loop

我怎么想在double 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 ,有人可以引导我通过吗?

5 个答案:

答案 0 :(得分:2)

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

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

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

我们如何判断一个数字是否为奇数?

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

所以让我们写一些代码:

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;
        }
    }
}

答案 1 :(得分:1)

for (int i=0; i<9; i++) {
    for (int j=0; j<9; j++) {
        array[i][j] = ((j%2 && i%2)?1:0);
    }
}

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

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


练习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打印网格的循环。
  • 手动内联函数(即用函数代码替换函数调用)并尝试简化它。

答案 4 :(得分: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;
}