我无法找到我的程序的这一部分有什么问题,我想在我的结构(数组)中找出最多的数字,但它只找到最后一个数字:/
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。它只是我代码的一部分
答案 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
这应该可以工作并返回给定数组中最常出现的数字(它的运行时间很差,但是非常简单且易于理解)。