在过去的一个小时里,我一直在尝试对其进行编码,但我一直在获得"分割误差";。我对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("%dn", 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("%dn", 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
。