结构中最常出现的数字(数组)

时间:2015-04-28 10:10:08

标签: 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。它只是我代码的一部分

2 个答案:

答案 0 :(得分:1)

您没有向我们展示足够的代码,但很可能您没有看到函数的真实结果。结果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

答案 1 :(得分:0)

如果你有英文变量名称会很好,所以我可以更好地阅读它们^^。您的参数VideoView应该怎么做?这是阵列长度吗?你应该做什么功能呢?它没有返回值或其他东西。

n

这应该可以工作并返回给定数组中最常出现的数字(它的运行时间很差,但是非常简单且易于理解)。