Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2017, 14:18   #1
xKito
Новичок
Джуниор
 
Регистрация: 21.12.2017
Сообщений: 1
Вопрос Удалить все числа Армстронга из динамического массива

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

Удалить из динамического массива все числа, являющиеся числами Армстронга (натуральное число, удовлетворяющее условию: сумма цифр, возведенных в степень 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;
}
Заранее спасибо
xKito вне форума Ответить с цитированием
Старый 21.12.2017, 14:31   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от xKito Посмотреть сообщение
натуральное число, удовлетворяющее условию: сумма цифр, возведенных в степень n равна самому числу 153=13+53+33
Вы так написали, что непонятно, что такое 13, 53, 33....
лучше так: 153=1^3+5^3+3^3
или так: arm.png

по сути вопроса.

во-первых, зачем Вы переставляте значение в конец?!
Это не нужно:
Код:
            temp=a[i];
            for (j=i; j<n-1; j++)
            {
 
                a[j]=a[j+1];
 
            }
            a[n-1]=temp;
и, главное, попробуйте закомментировать/удалить строчку
Цитата:
Код:
a=(int *)realloc(a,n*sizeof(int));
как поведёт себя программа?

Последний раз редактировалось Serge_Bliznykov; 21.12.2017 в 14:37.
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить все числа Армстронга, состоящие из трех и четырех цифр. Shyrick Паскаль, Turbo Pascal, PascalABC.NET 1 21.05.2014 06:45
Задача: удалить из массива все простые числа Ildarraddo Паскаль, Turbo Pascal, PascalABC.NET 16 25.01.2014 21:27
Найти все числа Армстронга от 1 до k наташка-ромашка Общие вопросы Delphi 3 31.03.2011 18:21
Удалить из массива все чётные числа! malishka ya@ Помощь студентам 4 28.05.2010 01:55
Удалить из массива(одномерного) все повторяющиеся числа(Delphi) Махор Помощь студентам 4 29.11.2007 23:25