我必须编写一个程序,它接受 n 个整数并显示数组的度数

I have to write a program which accepts n number of integers and display the degree of the array

过去一个小时我一直在尝试对此进行编码,但我不断收到“分段错误”。我对 C 还是很陌生,所以请不要太苛刻。有人可以帮忙吗?

这是我的代码:

输入:4 2 4 2 2 5 6 输出:3

#include<stdio.h>
#include<stdlib.h>

int degreeOfArray(int arr[], int n)
{
    int maxnum = -100000;
    int currentN = 0;
    int res;
    for(int i = 0; i < n; i++)
    {
        currentN = 0;
        for(int j = 0; j < n; j++)
        {
            if(arr[i] == arr[j])
            {
                currentN++;
            }
        }
        if(currentN > maxnum) /*if the current is greater than max, current is max*/
        {
            maxnum = currentN;
            res = arr[i];
        }
    }
    return res;
}

int main(int argc, char**argv)
{
    argv++;
    int n = argc - 1;
    int arr[n];
    for(int i = 0; i < n; i++)
    {
        arr[i] = atoi(argv[i + 1]);
    }
    printf("%d\n", degreeOfArray(arr, n));
}

这有点调皮:

int main(int argc, char**argv)
{
    argv++;
    int n = argc - 1;
    int arr[n];
    for(int i = 0; i < n; i++)
    {
        arr[i] = atoi(argv[i + 1]);
    }
    printf("%d\n", degreeOfArray(arr, n));
}
  • Argc 为 4。
  • 你递增 argv(这很顽皮)。
  • n 为 3。
  • arr 的值为 [0] 到 [2]
  • 你从 0..2 循环(没问题)
  • 你设置arr[i]没问题,但是调用atoi(argv[i+1])是个问题

I 将达到 2。因此您要达到 argv[3]。如果你没有递增 argv.

就好了

所以要么去掉那里的 i+1 要么不增加 argv