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,

更新於: 2022年4月7日

366 次檢視

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告

© . All rights reserved.