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,
广告