C "Ошибка RunTime" для UVa 1225 "Digit Counting"
Я решал проблему UVa. При проверке в UVa показывалось "Woohoo! Ваш вывод идентичен принятому выводу!". Но когда я представил код, он продолжал получать "Ошибка выполнения". Я понятия не имею, почему это происходит или почему "ошибка во время выполнения вообще происходит".
Вот проблема -> https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=16&page=show_problem&problem=3666
Вот мой код ->
#include <stdio.h>
#include <stdlib.h>
int main()
{
int j=0,n,num,i,a[10000],b[10],k,it,l;
scanf("%d",&it);
for(l=0; l<it; l++)
{
scanf("%d",&n);
j=0;
for(i=1; i<=n; i++)
{
num=i;
while(num!=0)
{
k=num%10;
num=num/10;
a[j]=k;
j++;
}
}
a[j]=9999;
for(i=0; i<=9; i++)
{
b[i]=0;
}
for(j=0; a[j]!=9999; j++)
{
b[a[j]]++;
}
printf("%d",b[0]);
for(i=1; i<=9; i++)
{
printf(" %d",b[i]);
}
printf("\n");
}
return 0;
}
1 ответ
RunTime Error
происходит в вашем коде segmentation fault
, Это из-за использования вами a[10000]
, В вашем коде a[j]=k;
Вы используете так много памяти.(для двузначного числа вы используете 2 массива, 3 цифры 3 и т. д.) Так что для числа больше 3000
(приблизительно) Вы вышли за пределы 10000
и результаты segmentation error
,
Тебе это не нужно a[10000]
реализовать счетный код.
Попробуйте этот упрощенный код:-
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, num, i, b[10], k, it, l;
scanf("%d", &it);
for (l = 0; l < it; l++)
{
for (i = 0; i <= 9; i++)
{
b[i] = 0;
}
scanf("%d", &n);
for (i = 1; i <= n; i++)
{
num = i;
while (num != 0)
{
k = num % 10;
num = num / 10;
b[k]++;
}
}
printf("%d", b[0]);
for (i = 1; i <= 9; i++)
{
printf(" %d", b[i]);
}
printf("\n");
}
return 0;
}
Выход:-
2
3
13
0 1 1 1 0 0 0 0 0 0
1 6 2 2 1 1 1 1 1 1