查找数组中给定数字的出现次数
Finding number of occurence of a given number in an array
我正在测试一个递归函数,该函数返回数组中给定数字的出现次数。运行代码时出现意外结果。
#include <iostream.h>
int Occurence(int A[], int size, int n)
{
static int occur=0;
if(size == 0)
{
int occur2 = (int) occur;
return occur2;
}
else
{
if ( n == A[size-1])
occur++;
Occurence(A, size-1, n);
}
}
int main()
{
int A[] = {1,3,2,5,1,2, 3, 7,7, 8,8, 4, 6, 9,9, 0};
int size = sizeof(A)/sizeof(A[0]);
int n;
cout<< "Enter Number to Find : ";
cin >>n;
cout<<endl;
cout<<"Number of Occurence of "<< n << " is :"<< Occurence(A, size, n)<<endl;
return 0;
}
你在函数结束时缺少一个返回。如果size
不为 0,则函数的行为未定义。添加返回应该使其正常工作:
int Occurence(int A[], int size, int n)
{
static int occur=0;
if(size == 0)
{
int occur2 = (int) occur;
return occur2;
}
else
{
if ( n == A[size-1])
occur++;
return Occurence(A, size-1, n);
}
}
递归是实现这个问题的一种非常奇怪的方法,所以我假设这是一些玩具示例来演示递归的工作原理。即使是这种情况,你也不应该在实现中使用静态变量。只需让每个调用返回当前总和:
int Occurence(int A[], int size, int n)
{
if(size == 0)
{
return 0;
}
else
{
return (n == A[size-1] ? 1 : 0) + Occurence(A, size-1, n);
}
}
此版本在多次调用时将返回正确的结果,而您的原始版本每次都会添加到以前的计数中。
在实际代码中,只需执行以下操作:
#include <algorithm>
int Occurence(int A[], int size, int n)
{
return std::count(A, A+size, n);
}
代码中存在一些编译问题。首先,在C++中,标准库文件通常文件名中没有扩展名。所以,包括<iostream.h>
是错误的。您应该包括<iostream>
.
代码的另一个问题是您在使用cout
和cin
而没有指定其命名空间。因此,不要直接使用cout
和cin
,而是使用std::cout
和std::cin
或在包含后声明use namespace std
。
编辑:正如托马斯马修斯指出的那样,更喜欢使用std::cout
和std::cin
而不是using namespace std
。
相关文章:
- 在将数字随机生成为数组期间从内存输出随机数的数组
- 如何计算数组中元素的位数?(不是数组的长度),并计算其数字的总和
- 数组/c++中的大量数字
- 遍历并行数组以确定C++中的最大数字
- 整数区间(或 int 数组)中每个数字的出现次数
- 如何在 C++ 中将文件中的逗号分隔数字读取到数组中?
- 将随机生成的数字添加到数组 + 对这些数组求平均值
- 遇到此问题时遇到困难:允许用户输入数组的值并使用 for,而循环也输出输入的最大数字
- 获取 2D 数组 c++ 中的所有数字对
- 为什么使用数组元素查找最大数字的程序不起作用?
- 如何从向量或数组中选择最常见的数字?(前五名)C++
- 如何从保存在 Java 中C++的字节数组中读取数字?
- 以十为基数的数字到布尔数组,该数组要求二进制/基数为 2 的数字
- C++ 检查结果数组中有多少次数字
- 如何在不使用 C++ 中的数组或函数的情况下查找 N 位数字的所有排列
- 如何在C++中有效地将数字值重新分配给字符数组
- 查找数组中的最小数字
- 查找数组中重复(重复)数字的索引
- 我必须找到给定数组中所有数字的周期,就像有很多解决方案,但数组的大小是 10^5
- 类、数字/数组或对象中的对象