双回路用于交替C++
Double for loop for alternation C++
我应该如何在双 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_zeroes
和prints_zeroes_and_ones
之间进行选择 - 编写一个使用
print_a_line
打印网格的循环。 - 手动内联函数(即用函数代码替换函数调用)并尝试简化它。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 用于访问容器<T>数据成员的正确 API
- 重载操作程序时出错>>用于类中的字符串 memebr
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- C++中的cin.ignore()函数不适用于整个流
- 没有用于初始化C++中的变量模板的匹配构造函数
- 用于C++中带有数组和指针的循环
- 为什么它不适用于Visual 2019的原因
- 使用在用于SFINAE的void_t中具有参数的方法
- 在createdialog创建的窗口中捕获用于编辑控件的OnMouseMove消息
- 重载==不适用于二进制树
- Insert函数不适用于2 if语句C++
- 用于矢量处理的多个线程
- 使外部项目可用于find_package CMake
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- 为什么模数运算符不适用于该代码
- 并行用于C++17中数组索引范围内的循环
- 将fold表达式与std::一起用于两个元组
- 在用于格式4的arm模拟器中实现功能时的一个问题