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.tw/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 次檢視

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.