C++程序:两鼠分苹果


假设我们有一个数字n和两个不同大小的数组A和B。有两只老鼠:m1和m2。我们在它们面前放了n个苹果。我们知道m1喜欢哪些苹果。同样,我们也知道m2喜欢哪些苹果。我们不想让老鼠之间发生冲突(因为它们可能喜欢同一个苹果),所以我们决定自己将苹果分发给老鼠。我们将给m1一些苹果,给m2一些苹果。每只老鼠得到多少苹果并不重要,但重要的是每只老鼠只能得到它喜欢的苹果。也可能某只老鼠没有得到任何苹果。A[i]保存m1喜欢的苹果,B[i]保存m2喜欢的苹果。我们必须打印如何分配它们。

问题类别

在数据结构中,数组是特定类型元素的有限集合。数组用于在连续的内存位置存储相同类型的元素。数组被分配一个特定的名称,并在各种编程语言中通过该名称引用它。要访问数组的元素,需要索引。我们使用术语“name[i]”来访问位于数组“name”的“i”位置的特定元素。可以使用数组实现各种数据结构,例如堆栈、队列、堆和优先级队列。数组上的操作包括插入、删除、更新、遍历、搜索和排序操作。请访问下面的链接以了解更多信息。

https://tutorialspoint.com/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 次查看

开启你的职业生涯

通过完成课程获得认证

开始学习
广告