Удалить все числа Армстронга из динамического массива

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
xKito
Сообщения: 1
Зарегистрирован: 21 дек 2017, 14:22

21 дек 2017, 14:25

Добрый день, возникла проблема с задачей, условие которой звучит так

Удалить из динамического массива все числа, являющиеся числами Армстронга (натуральное число, удовлетворяющее условию: сумма цифр, возведенных в степень n равна самому числу 153=13+53+33 степень n, степень определяется по количеству цифр в числе)

Я написал код, но он почему-то удаляет только одно число, а дальше не идёт, помогите разобраться в чем ошибка.

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>
int power(int t, int k)
{
    int res = 1;
    while (k)
    {
        if (k & 1)
            res *= t;
        t *= t;
        k >>= 1;
    }
    return res;
}
 
int Armstrong(int n)
{
    int i,a,c=0,b=0;
    a=n;
    while(a>0)
    {
        a=a/10;
        c++;
    }
    a=n;
    while (a>0)
    {
        b=b+power((a%10),c);
        a=a/10;
    }
    a=n;
    if(b==a)
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
 
int main()
{
    int b,n=0,i,k,count=0;
    printf("Enter array size\n");
    printf("Array size:");
    scanf("%d",&n);
    int *a=(int *)malloc(n* sizeof(int));
    for(i=0; i<n; i++)
    {
        printf("A[%d]=",i);
        scanf("%d",&a[i]);
    }
    count=0;
    int temp;
    int j;
    for(i=0; i<n; i++)
    {
        k=Armstrong(a[i]);
        if (k==1)
        {
            temp=a[i];
            for (j=i; j<n-1; j++)
            {
 
                a[j]=a[j+1];
 
            }
            a[n-1]=temp;
            for(i=0; i<n; i++)
            {
                printf("%d ",a[i]);
 
            }
            printf("\n");
 
            n--;
            a=(int *)realloc(a,n*sizeof(int));
        }
    }
    for(i=0; i<n; i++)
    {
        printf("%d ",a[i]);
 
    }
    return 0;
}
Ответить