我必须编写一个程序,它接受 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
。
过去一个小时我一直在尝试对此进行编码,但我不断收到“分段错误”。我对 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
。