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,那么输出将是

10101
00000
10101

步骤

为了解决这个问题,我们将遵循以下步骤:

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

更新于:2022年4月8日

161 次查看

启动您的职业生涯

完成课程获得认证

开始
广告