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

C++ 结构(数组)中最常出现的数字,c++,c,arrays,structure,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)

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

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;

                }

            }
        }
    }
}
void daugiausai(int n)
{
int max=0;
int sk;
对于(int i=0;imax){
max=kiek;
sk=A[i].datamet;
}
}
}
}
}

注:这只是我代码的一部分

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

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

(这种封装并非在所有情况下都有效,但在这里,它的好处是可以对相同结构磁带的多个不同阵列使用相同的功能。)

测试当前元素数是否超过计数循环后的最大值也就足够了

综上所述:

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;
}

如果您有英文变量名,那就太好了,这样我可以更好地阅读它们^^。您的参数
n
应该做什么?这是数组长度吗?你应该怎么做?它没有返回值或其他东西

int getMostOccuring(int array[], int length)
{
   int current_number;
   int current_count = 0;
   int most_occuring_number;
   int most_occuring_count = 0;

   for (int i = 0; i < length; i++)
   {
      current_number = array[i];
      current_count = 0;

      for (int j = i; j < length; j++)
      {
          int test_number = array[j];

          if (test_number == current_number)
          {
             current_count ++;

             if (current_count > most_occuring_count)
             {
                most_occuring_number = current_number;
                most_occuring_count = current_count;
             }
          }
      }
   }

   return most_occuring_number;
}
int getmostoccharing(int数组[],int长度)
{
int当前_编号;
int当前_计数=0;
int最常出现的数;
int最常发生计数=0;
for(int i=0;i最常发生计数)
{
最常发生的编号=当前编号;
最常发生计数=当前计数;
}
}
}
}
返回最常出现的号码;
}

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

您是否尝试过使用调试器?欢迎使用堆栈溢出!寻求调试帮助的问题(“为什么这段代码不起作用?”)必须包括所需的行为、特定的问题或错误以及在问题本身中重现它所需的最短代码。没有明确问题陈述的问题对其他读者没有用处。请参阅:。脚本在哪里?这是一个C程序。jhamon,这个程序(不是脚本,对不起,我不是程序员,我只是初学者)正在运行,只是没有找到最常见的数字。这是我的完整代码,你能看一下我写fr的结尾吗?错误指的是
Isvedimas
函数。那里没有称为
sk
的符号。
daugiausai
中的
sk
定义是该函数的局部定义。定义仅在声明的大括号中有效。是否有任何方法可以在Isvedimas函数中打印“sk”而不丢失保存在其中的信息?正如我所说:最好为每个函数提供数据。如果函数有结果,则返回它。然后打印返回的值,如我的示例中的最后一段代码。这是原始函数的主要错误:它计算值,但不返回任何值。当我尝试返回(return sk;)时,我得到一个错误:Void函数“daugiausai”不应返回值。
int getMostOccuring(int array[], int length)
{
   int current_number;
   int current_count = 0;
   int most_occuring_number;
   int most_occuring_count = 0;

   for (int i = 0; i < length; i++)
   {
      current_number = array[i];
      current_count = 0;

      for (int j = i; j < length; j++)
      {
          int test_number = array[j];

          if (test_number == current_number)
          {
             current_count ++;

             if (current_count > most_occuring_count)
             {
                most_occuring_number = current_number;
                most_occuring_count = current_count;
             }
          }
      }
   }

   return most_occuring_number;
}