我在HackerRank上名为“ Equalize Array”的问题, https://www.hackerrank.com/challenges/equality-in-a-array/problem
我已经完成了该程序,并且可以在我的编译器上正常工作,但是当我在HackerRank网站上使用相同的代码时,则无法正常工作。 向我显示此错误
GDB trace:
Reading symbols from solution...done.
[New LWP 4647]
Core was generated by `solution'.
Program terminated with signal SIGBUS, Bus error.
#0 0x00005581998066b0 in main () at solution.c:15
15 scanf("%ld",&arr[i]);
#0 0x00005581998066b0 in main () at solution.c:15
我的代码是:-
#include<stdio.h>
int main()
{
long int arr[100];
long int n,i,j;
long int larg=0, largno=0;
scanf("%d",&n);
long int iarr[n];
long int max=0;
long int out=0,fout=0;
for(i=0;i<n;i++)
{
scanf("%ld",&arr[i]);
}
for(j=0;j<n;j++)
{
max=0;
for(i=0;i<n;i++)
{
if(arr[j]==arr[i])
{
max++;
}
}
iarr[j]=max;
}
for(j=0;j<n;j++)
{
if(larg < iarr[j])
{
larg = iarr[j];
largno = j;
}
}
for(i=0;i<n;i++)
{
if(arr[largno]==arr[i])
{
out++;
}
}
fout=n-out;
printf("%ld",fout);
}
请帮助我解决这个问题:)
答案 0 :(得分:2)
您需要验证n
的范围是[1,99]。
scanf("%d", &n)
需要int
,而您传递的是long
。
验证格式字符串,检查返回值是否有错误,并确保值在可接受的范围内。
始终使用-Wall -Wextra
编译代码,这些代码还会报告格式字符串和参数类型不匹配。