C++程序:在给定条件下确定餐盘摆放顺序
假设我们有两个数字h和w,分别表示桌子的高度和宽度。桌子被分成h × w个单元格。在桌子的每个单元格中,我们可以放置一个盘子或保持空着。由于每位客人必须坐在他们的盘子旁边,我们只能在桌子的边缘——矩形的第1行或最后一行,或第1列或最后一列——放置盘子。为了让客人感到舒适,不能将两个盘子放在具有公共边或角的单元格中。换句话说,如果单元格(i,j)包含一个盘子,我们就不能将盘子放在单元格(i−1,j),(i,j−1),(i+1,j),(i,j+1),(i−1,j−1),(i−1,j+1),(i+1,j−1),(i+1,j+1)中。在保持上述规则的同时,尽可能多地放置盘子。我们必须打印当前的桌子状态。
问题类别
在数据结构中,数组是特定类型元素的有限集合。数组用于将相同类型的元素存储在连续的内存位置中。数组被赋予一个特定的名称,并且在各种编程语言中通过该名称引用它。要访问数组的元素,需要索引。我们使用术语“name[i]”来访问数组“name”中位置“i”的特定元素。可以使用数组实现各种数据结构,例如堆栈、队列、堆和优先队列。数组上的操作包括插入、删除、更新、遍历、搜索和排序操作。请访问下面的链接了解更多信息。
https://tutorialspoint.com/data_structures_algorithms/array_data_structure.htm
因此,如果我们问题的输入是这样的:h = 3; w = 5,那么输出将是
1 | 0 | 1 | 0 | 1 |
0 | 0 | 0 | 0 | 0 |
1 | 0 | 1 | 0 | 1 |
步骤
为了解决这个问题,我们将遵循以下步骤:
for initialize i := 1, when i <= h, update (increase i by 1), do: for initialize j := 1, when j <= w, update (increase j by 1), do: if i is same as 1 or i is same as h, then: print 1 if (j AND 1) is 1, otherwise 0 otherwise when i is not equal to 2 and i is not equal to h - 1 and i is odd and (j is same as 1 or j is same as w), then: print 1 Otherwise print 0 move cursor to the next line
示例
让我们看看下面的实现来更好地理解:
#include <bits/stdc++.h> using namespace std; void solve(int h, int w){ for (int i = 1; i <= h; ++i){ for (int j = 1; j <= w; ++j){ if (i == 1 || i == h) cout << ((j & 1)) << " "; else if (i != 2 && i != h - 1 && (i & 1) && (j == 1 || j == w)) cout << 1 << " "; else cout << 0 << " "; } cout << endl; } } int main(){ int h = 3; int w = 5; solve(h, w); }
输入
3, 5
输出
1 0 1 0 1 0 0 0 0 0 1 0 1 0 1
广告