C 计算最大数量的事件

C 计算最大数量的事件,c,arrays,find-occurrences,C,Arrays,Find Occurrences,我一直在尝试为一个程序编码,该程序将输入存储到一个数组中,然后允许我将其打印出来。它还让我知道哪个数字最大。我想弄明白的是,如何让我的程序告诉我数组中最大数字的输入次数(出现次数)。这是到目前为止我的代码。到目前为止,此代码将我输入的数字、数组中最大的元素以及我输入的每个数字的出现次数(数字出现次数不正确)输出到数组中。在所有情况下,每个数字出现的次数都是0。这显然是错误的。同样,我需要我的程序显示最大的数字(它是这样做的),并且只显示出现的最大数字。欢迎提供所有建议、提示或想法。多谢各位 #i

我一直在尝试为一个程序编码,该程序将输入存储到一个数组中,然后允许我将其打印出来。它还让我知道哪个数字最大。我想弄明白的是,如何让我的程序告诉我数组中最大数字的输入次数(出现次数)。这是到目前为止我的代码。到目前为止,此代码将我输入的数字、数组中最大的元素以及我输入的每个数字的出现次数(数字出现次数不正确)输出到数组中。在所有情况下,每个数字出现的次数都是0。这显然是错误的。同样,我需要我的程序显示最大的数字(它是这样做的),并且只显示出现的最大数字。欢迎提供所有建议、提示或想法。多谢各位

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <ctype.h>



int main()
{
int arrayNum[15];
int a;
int max=0;
int location;


for( a=0; a < 15; a++)
    {   
        printf("Enter element %d:", a);
        scanf("%d",&arrayNum[a]);
    }

for(a=0; a < 15; a++)
    {
        printf("%d\n", arrayNum[a]);
    }

for (a = 1; a < 15; a++)
  {
    if (arrayNum[a] > max)
    {
       max  = arrayNum[a];
       location = a+1;
    }
    }
printf("Max element in the array in the location %d and its value %d\n", location, max);

for(a=0; a<15; a++)
    {
        if(arrayNum[a+1] == arrayNum[a])
            continue;
        else
            printf("Number %d: %d occurences\n", arrayNum[a]);
    }
return 0;





}
#包括
#包括
#包括
#包括
#包括
int main()
{
int arrayNum[15];
INTA;
int max=0;
int定位;
对于(a=0;a<15;a++)
{   
printf(“输入元素%d:,a”);
scanf(“%d”和&arrayNum[a]);
}
对于(a=0;a<15;a++)
{
printf(“%d\n”,arrayNum[a]);
}
对于(a=1;a<15;a++)
{
如果(arrayNum[a]>最大值)
{
max=arrayNum[a];
位置=a+1;
}
}
printf(“位置%d中数组中的最大元素及其值%d\n”,位置,最大值);

for(a=0;a用以下代码替换last for循环

NoOfOccurances = 0;
for(a=0; a<15; a++)
    {
        if(max == arrayNum[a])
        {
             NoOfOccurances++;
        }  

    }

 printf("Number %d: %d occurences\n", max,NoOfOccurances);
NoOfOccurances=0;

对于(a=0;a对于第三个for循环,即查找数组中最大数字的循环,我建议将max设置为arrayNum[0],这样即使是负数也可以使用

然后,要知道最高数字出现了多少次,您需要一个
count
变量,该变量在每次数组数等于max时递增(
count++


祝您好运。

我发现您的代码中存在一些问题。首先,
的第三个
循环从1开始,但它不会将
max
更新为
arrayNum[0]
的值

那么,对于手头的问题,我有两个变量:

int max; // The maximum value
int max_count; // The count of the maximum value
然后,查找最大值和计数的逻辑如下:

对于每个元素,将其与所看到的最大值进行比较。如果相等,则递增
max\u count
。如果较大,则使用该值更新
max
,并将
max\u count
设置为1。如果较小,则忽略它。例如:

max = arrayNum[0];
max_count = 1;
for (int a = 1; a < 15; ++a)
{
    if (arrayNum[a] == max)
       max_count++;
    else if (arrayNum[a] > max)
    {
        max_count = 1;
        max = arrayNum[a];
    }
}
max=arrayNum[0];
最大计数=1;
对于(int a=1;a<15;++a)
{
if(arrayNum[a]==max)
最大计数++;
否则如果(arrayNum[a]>最大值)
{
最大计数=1;
max=arrayNum[a];
}
}

您需要做的就是引入一个新变量来跟踪
max
的出现次数。当找到一个新值
max
时,将该计数设置为零。当发现一个后续值等于
max
时,增加计数器


顺便说一句,您的代码没有正确地找到当前形式的最大值。请尝试一个数组元素都为负值的测试用例。尝试另一个所有值都为正值的测试用例,并输入第一个值(
arrayNum[0]
)是最大值。在这两种情况下,您都会发现函数实际上找不到最大值。

在开始下面的循环之前
max
仍然是0

  max = a[0];

  for (a = 1; a < 15; a++)
  {
    if (arrayNum[a] > max)
    {
       max  = arrayNum[a];
       location = a+1;
    }
  }
max=a[0];
对于(a=1;a<15;a++)
{
如果(arrayNum[a]>最大值)
{
max=arrayNum[a];
位置=a+1;
}
}
后来

int n=0;

对于(i=0;i,您可以在一次循环迭代中执行您想要的操作:

int count = 1;
int position = 0;
int max = arrayNum[0];
int N = 15;
int p;

for (p = 1; p < N; ++p)
{
    if (arrayNum[p] > max) // Find a bigger number
    {
       max  = arrayNum[p]; 
       pos = p;
       count = 1;
    }
    else if ( arrayNum[p] == max) // Another occurrences of the same number
          count++;
}
int count=1;
int位置=0;
int max=arrayNum[0];
int N=15;
INTP;
对于(p=1;pmax)//找到一个更大的数字
{
max=arrayNum[p];
pos=p;
计数=1;
}
else if(arrayNum[p]==max)//相同数字的另一个实例
计数++;
}

一个时间复杂度为
O(n)

intmaxoccurrence(inta[],intar\u大小)
{
int max=a[0],计数=0,i;
for(i=0;imax)//查找最大数
{
max=a[i];
计数=1;
}
}
printf(“数组中的最大元素为%d\n”,max);
返回计数;
}

保留一个事件计数,最初为1,第一个最大值为elem[0]。在遍历数组的其余部分时,当您找到较大的元素时,请将最大值重置为新值,并将出现次数重置为1,否则,如果元素等于当前最大值,请提高出现率。仅此而已。完成所有这些操作不应需要多次扫描。
int count = 1;
int position = 0;
int max = arrayNum[0];
int N = 15;
int p;

for (p = 1; p < N; ++p)
{
    if (arrayNum[p] > max) // Find a bigger number
    {
       max  = arrayNum[p]; 
       pos = p;
       count = 1;
    }
    else if ( arrayNum[p] == max) // Another occurrences of the same number
          count++;
}
int maxoccurence(int a[],int ar_size)
{
    int max=a[0],count=0,i;

    for(i=0;i<ar_size;i++)
    {
        if(a[i]==max)//counting the occurrence of maximum element 

        count++;

        if(a[i]>max)//finding maximum number
        {
            max=a[i];

            count=1;
        }
    }

    printf("Maximum element in the array is %d\n",max);

    return count;
}