我需要写一个程序,检查是否有3个或更多匹配的数字数组。我的代码工作正常,直到有一个像“2 2 3 3 5 5 4 4 1 1”这样的数组,然后它批准数组中有3个或更多的重复,这是不正确的。也许有人知道一个简单的解决方案,这将帮助我吗?或者我需要重写我的代码吗?下面是我的代码:
#include <iostream>
using namespace std;
void funk(int n, int a[], int &kiek);
int main()
{
int n, a[101],kiek=0;
cin >> n;
for (int i = 0; i < n; i++) {
cin >> a[i];
}
funk(n, a, kiek);
if (kiek > 2) {
cout << "TAIP";
}
else
cout << "NE";
}
void funk(int n, int a[], int &kiek)//funkcijos kūnas
{
int j;
for (int i = 0; i < n; i++) {
for (j = i + 1; j < n; j++) {
if (a[i] == a[j])
kiek++;
cout << kiek;
}
}
}
这是输入:
10
2 2 3 3 5 5 4 4 1 1
这是我需要得到的输出:
NE
1条答案
按热度按时间hmae6n7t1#
您的代码存在的问题是:
您正在比较任意两个数字,并且永远不会重置计数器。所以如果有11,你就在增加计数器。如果有一个2,你也在增加计数器。最后的3个3你也增加了相同的计数器。那就是3。虽然只有两个相同的值。这行不通的。你能做的是
我将向您展示“更现代”的C方法,并将使用C算法来实现下面的示例解决方案。
首先,我们将从用户那里获得要处理的值的数量。我们将这些值存储在
std::vector
中。然后,我们使用std::copy_n
将值从std::cin
复制到std::vector
。为此,我们将使用std::istream_iterator
来迭代用户给定的元素。因此,我们使用一个简单的单行程序读取用户的所有值。接下来是频率计数。为此,我们有一个标准的C解决方案。你会在网上的几十个地方找到它。我们将使用
std::map
。键是我们读入向量的整数,值是计数器。使用std::map
的索引操作符[]
,我们向Map添加一个值,如果它还不存在。使用,我们只需进行计数,无论值已经在std::map
中还是刚刚添加。这也是一个非常简单的单行线。然后,我们检查是否有任何计数大于2。为此,我们将使用STL算法
std::any_of
和一个非常简单的lambda。有了它,我们就能创造出你想要的结果。最后但并非最不重要的是,如果计数大于2,我们将显示所有值及其计数。这是我们用一个超简单的基于range的for循环来实现的。我们使用结构化绑定从计数器-
std::map
中提取值。请看:
我希望这能给你一个如何做到这一点的想法。……