c++ - 结构体(数组)中出现次数最多的数字

标签 c++ c arrays structure

我无法找出我的程序的这一部分有什么问题,我想找出我的结构(数组)中出现次数最多的数字,但它只找到最后一个数字:/

void Daugiausiai(int n)
{
    int max = 0;
    int sk;
    for(int i = 0; i < n; i++){
            int kiek = 0;
        for(int j=0; j < n; j++){
            if(A[i].datamet == A[j].datamet){
                kiek++;
                if(kiek > max){
                    max = kiek;
                    sk = A[i].datamet;

                }

            }
        }
    }
}

ps。它只是我代码的一部分

最佳答案

您没有向我们展示足够的代码,但您很可能没有查看函数的真实结果。结果 sk 是函数的本地值,您不返回它。如果您有也名为 sk 的全局变量,则 Daugiausiai 不会触及它。

以同样的方式,您可以传递结构体数组中的元素数量,但可以处理全局结构体。 “封装”函数是一种很好的做法,以便它们接收其处理的数据作为参数并返回结果。因此,您的函数应该传递数组长度和数组并返回结果。

(这种封装并不适用于所有情况,但在这里,它的好处是您可以对同一结构磁带的许多不同数组使用相同的函数。)

在计数循环之后测试当前元素数量是否超过最大值也足够了。

将所有这些放在一起:

struct Data {
    int datamet;
};

int Daugiausiai(const struct Data A[], int n)
{
    int max = 0;
    int sk;

    for (int i = 0; i < n; i++){
        int kiek = 0;

        // Count occurrences
        for(int j = 0; j < n; j++){
            if(A[i].datamet == A[j].datamet) kiek++;
        }

        // Check for maximum
        if (kiek > max) {
            max = kiek;
            sk = A[i].datamet;
        }
    }

    return sk;
}

你这样调用它:

struct Data A[6] = {{1}, {2}, {1}, {4}, {1}, {2}};
int n = Daugiausiai(A, 6);

printf("%d\n", n);    // 1

关于c++ - 结构体(数组)中出现次数最多的数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29916459/

相关文章:

python - 将指针定义为类的方法?

php - 如何列出修改过的文件?

javascript - 将值插入数组并在进行另一个选择时刷新该数组

c++ - 没看懂Stroustup先生建议删除抽象类Shape的copy default和move操作

c - 如何化解这个二进制炸弹第 4 阶段

c++ - 如何在 BCB XE 中将十六进制字符串编码为整数

c - 包含不可表示字符的三字母的字 rune 字的含义

C++ 从 'char' 到 'const char' 的无效转换

c++ - 通过 std::shared_ptr 使用 Rcpp 和 RcppParallel 的线程安全函数指针

c++ - 将文件中的值读入 2D vector 会导致所有值为零