C++程式:兩鼠分蘋果
假設我們有一個數字n和兩個不同大小的陣列A和B。有兩隻老鼠:m1和m2。我們在它們面前放了n個蘋果。我們知道m1喜歡哪些蘋果。同樣,我們也知道m2喜歡哪些蘋果。我們不想讓老鼠之間發生衝突(因為它們可能喜歡同一個蘋果),所以我們決定自己將蘋果分發給老鼠。我們將給m1一些蘋果,給m2一些蘋果。每隻老鼠得到多少蘋果並不重要,但重要的是每隻老鼠只能得到它喜歡的蘋果。也可能某隻老鼠沒有得到任何蘋果。A[i]儲存m1喜歡的蘋果,B[i]儲存m2喜歡的蘋果。我們必須列印如何分配它們。
問題類別
在資料結構中,陣列是特定型別元素的有限集合。陣列用於在連續的記憶體位置儲存相同型別的元素。陣列被分配一個特定的名稱,並在各種程式語言中透過該名稱引用它。要訪問陣列的元素,需要索引。我們使用術語“name[i]”來訪問位於陣列“name”的“i”位置的特定元素。可以使用陣列實現各種資料結構,例如堆疊、佇列、堆和優先順序佇列。陣列上的操作包括插入、刪除、更新、遍歷、搜尋和排序操作。請訪問下面的連結以瞭解更多資訊。
https://tutorialspoint.tw/data_structures_algorithms/array_data_structure.htm
因此,如果我們問題的輸入類似於n = 4;A = [1, 2];B = [2, 3, 4],則輸出將為[1, 1, 2, 2]
步驟
為了解決這個問題,我們將遵循以下步驟 -
Define an array v of size: n and fills with 0 for initialize i := 0, when i < size of A, update (increase i by 1), do: j := A[i] increase v[j - 1] by 1 for initialize i := 0, when i < n, update (increase i by 1), do: (if v[i] is same as 1, then print "1, ", otherwise print "2, ")
示例
讓我們看看以下實現以更好地理解 -
#include <bits/stdc++.h>
using namespace std;
void solve(int n, vector<int> A, vector<int> B){
int v[n] = { 0 };
for (int i = 0; i < A.size(); i++){
int j = A[i];
v[j - 1]++;
}
for (int i = 0; i < n; i++){
(v[i] == 1) ? cout << "1, " : cout << "2, ";
}
}
int main(){
int n = 4;
vector<int> A = { 1, 2 };
vector<int> B = { 2, 3, 4 };
solve(n, A, B);
}輸入
4, { 1, 2 }, { 2, 3, 4 }輸出
1, 1, 2, 2,
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP