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,那麼輸出將是
| 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
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP