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
Другие вопросы по тегам