Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/35: Рейтинг темы: голосов - 35, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 11
1

Найти все числа Армстронга до определённого предела

14.12.2014, 16:04. Показов 6735. Ответов 14
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите разобраться с программой. Учусь заочно, времени в обрез, но хочется самому понять, как правильно должна быть написана эта программа.
Суть задачи: Натуральное число из n цифр является числом Армстронга, если сумма его цифр, возведенных в n-ю степень, равна самому числу (например, 153). Получить все числа Армстронга, меньшие n(в n до 4 цифр).
Вот моя "печаль"... запутался окончательно, подскажите, что не так? И как должно быть? Просто выдает все числа под ряд. Помогите, пожалуйста! Хочу научиться программировать, а не заказывать...

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace ConsoleApplication7
{
    class Program
    {
        static void Main(string[] args)
        {
            int a, b, c;
            for (a = 0; a < 10; a++)
                for (b = 0; b < 10; b++)
                    for (c = 0; c < 10; c++)
                            {
                            double l = Math.Pow((a), (3)) + Math.Pow((b), (3)) + Math.Pow((c), (3));
                            double k = a * 100 + b * 10 + c;
                            if ((l = k) < 1000) Console.WriteLine(k);
                            Console.ReadKey();
                        }
        }
    }
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
14.12.2014, 16:04
Ответы с готовыми решениями:

Найти все трехзначные числа Армстронга
Натуральное число из n цифр является числом Армстронга, если сумма его цифр, возведенных в n-ную...

На промежутке от 1 до М найти все числа Армстронга
Помогите найти ошибку! Осуществить ввод целого числа М. На промежутке от 1 до М найти все числа...

Получить все числа Армстронга из промежутка от A до B
получить все числа Армстронга из промежутка от A до B ( A и B вводятся с клавиатуры). Натуральное...

Записать все числа Армстронга менее 100 000
число Armstrong Запишите все числа Армстронга менее 100 000. Армстронг число порядка п является...

14
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
14.12.2014, 16:20 2
Изучай
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
using System;
using System.Collections.Generic;
using System.Linq;
 
namespace Armstrong
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Введите число");
            int n = (int) uint.Parse(Console.ReadLine()); //Обеспечиваем ввод только положительных чисел для простоты
            bool isArmstrong = IsArmstrong(n);
            Console.WriteLine("{0} checked for be Armstrong, result = {1}", n, isArmstrong);
        }
 
        private static bool IsArmstrong(int number)
        {
            int n = number;
            var list = new List<int>(15);
            while (n > 0) // в этом цикле разбиваем число на цифры
            {
                list.Add(n % 10);
                n /= 10;
            } 
 
            var digits = list.ToArray(); //имеем массив для цифр 
            var poweredDigits = (int[]) digits.Clone(); // и для цифр, возведенных в n-ю степень
 
            while (true)
            {
                var sum = poweredDigits.Sum(); // считаем сумму
                if (sum > number)
                    return false;
                if (sum == number)
                    return true;
                for (int i = 0; i < poweredDigits.Length; i++) // Если проверки не прошли, возводим цифры в следующую степень
                {
                    poweredDigits[i] *= digits[i];
                }
            }
        }
    }
}
1
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
14.12.2014, 18:04 3
Stormantonio,
C#
1
if ((l == k) && l < 1000)
Добавлено через 15 минут
Psilon,
C#
1
Console.WriteLine(IsArmstrong(10));
еще не указано, что степень это основание системы счисления, т.е. она должна быть больше самой большой цифры, следовательно 9 хоть и равно 9^1 но не число Армстронга

Добавлено через 1 час 26 минут
Stormantonio,
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
class Program
{
    static void Main(string[] args)
    {
        Armstrong(153);
 
        Console.WriteLine("Для base = 10");
        for (int i = 0; i < 548835; i++)
        {
            if (IsArmstrong(i))
                Console.Write(i + " ");
        }
 
        Console.WriteLine(".");
        Console.ReadLine();
    }
 
    private static void Armstrong(int Decimal)
    {
        Console.WriteLine("Число {0} является числом Армстронга:", Decimal);
        for (int b = 2; b < Decimal; b++)
        {
            if (IsArmstrong(Decimal, b))
            {
                Console.WriteLine(" в системе c основанием {0} = {1}",
                    b, Convert(Decimal, b));
            }
        }
        Console.WriteLine(" во всех системах по основанию N > " + Decimal);
    }
 
    private static bool IsArmstrong(int Decimal, int Base = 10)
    {
        if (Base < 2) throw new ArgumentException();
 
        int n = (int)Math.Ceiling(Math.Log(Decimal, Base));
        int sum = 0, j = Decimal;
        while (j > 0)
        {
            sum += (int)Math.Pow(j % Base, n);
            j /= Base;
        }
 
        return sum == Decimal;
    }
 
    private static string Convert(int Decimal, int Base)
    {
        var sb = new StringBuilder();
        while (Decimal > 0)
        {
            if (Base > 10) sb.Insert(0, ' ');
            sb.Insert(0, Decimal % Base);
            Decimal /= Base;
        }
        return sb.ToString();
    }
}
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
14.12.2014, 19:53 4
rRczZZ, википедия утверждает, что 9 им является. Что касается
Цитата Сообщение от rRczZZ Посмотреть сообщение
Psilon,
Console.WriteLine(IsArmstrong(10));
это да, надо исправить
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
        private static bool IsArmstrong(int number)
        {
            int n = number;
            var list = new List<int>(15);
            while (n > 0) // в этом цикле разбиваем число на цифры
            {
                list.Add(n % 10);
                n /= 10;
            }
 
            var digits = list.ToArray(); //имеем массив для цифр 
            var poweredDigits = (int[])digits.Clone(); // и для цифр, возведенных в n-ю степень
 
            int lastsum = int.MinValue;
            while (true)
            {
                int sum = poweredDigits.Sum(); // считаем сумму
                if (sum > number || lastsum == sum)
                    return false;
                if (sum == number)
                    return true;
                for (int i = 0; i < poweredDigits.Length; i++) // Если проверки не прошли, возводим цифры в следующую степень
                {
                    poweredDigits[i] *= digits[i];
                }
                lastsum = sum;
            }
        }
и да, когда я вижу в подобных задачах Max.Pow, это вызывает боль
0
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
14.12.2014, 19:58 5
Psilon, да, можно переписать pow для целых чисел, но таки степень подбирать не нужно как т.с. пишет. Степень должна равняться числу цифр числа, почитайте на вики хотя бы. В вашем алгоритме можно убрать цикл с while - результат будет тот же.

не, не тот же. лишние значения - 4150 4151 ...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
14.12.2014, 20:03 6
rRczZZ, окей, давайте посмотрим в вики
Самовлюблённое число, или совершенный цифровой инвариант (англ. pluperfect digital invariant, PPDI) или число Армстронга — натуральное число, которое в данной системе счисления равно сумме своих цифр, возведённых в степень, равную количеству его цифр. Иногда чтобы считать число таковым, достаточно, чтобы степени, в которые возводятся цифры, были равны m — тогда число можно назвать m-самовлюблённым.
теперь смотрим задание ТС
Суть задачи: Натуральное число из n цифр является числом Армстронга, если сумма его цифр, возведенных в n-ю степень, равна самому числу (например, 153). Получить все числа Армстронга, меньшие n(в n до 4 цифр).
и становится очевидно, что имеется ввиду именно более общая формулировка.
0
814 / 422 / 169
Регистрация: 08.02.2013
Сообщений: 711
14.12.2014, 20:13 7
Psilon, меняя основание системы счисления вы получите другие цифры и их количество. Например число 153(10) = {3,12} (47) => 3^2 + (12)^2 = 153(10) (и это число также является числом армстронга в системе по основанию 10: 1^3 + 5^3 + 3^3 =153)

Просто перебирать степени нельзя, т.к. любое однозначное число является числом Армст. т.к. x^1 = x. Например, 153 будет также числом Армстр. во всех системах по основанию > 153. Т.е. перебор степеней (и одновременно оснований) всегда приведет к ответу true

Добавлено через 1 минуту
Цитата Сообщение от Psilon Посмотреть сообщение
и становится очевидно, что имеется ввиду именно более общая формулировка.
ok, я понял, но это уже не поиск чисел армстронга =)
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
14.12.2014, 20:17 8
Цитата Сообщение от rRczZZ Посмотреть сообщение
Просто перебирать степени нельзя, т.к. любое однозначное число является числом Армст. т.к. x^1 = x. Например, 153 будет также числом Армстр. во всех системах по основанию > 153. Т.е. перебор степеней (и одновременно оснований) всегда приведет к ответу true
ну а с такой формулировкой и я согласен
0
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 11
15.12.2014, 01:15  [ТС] 9
Спасибо большое за помощь!

Добавлено через 2 минуты
rRczZZ, спасибо за помощь! Я и не думал, что это будет такой большущий код... а попроще никак нельзя? Я даже объяснить здесь не все могу(((
Но все равно - спасибо огромное за помощь...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.12.2014, 01:19 10
Stormantonio, код товарища rRczZZ делает не то, что вам нужно по заданию. Но можете использовать и его, если хотите
0
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 11
15.12.2014, 01:31  [ТС] 11
Psilon, вы меня вообще в каменный век закинули... это же сколько надо перечитать литературы и иметь практики...
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.12.2014, 01:36 12
Stormantonio, да не так уж много, у меня опыт шарпа всего то года три, а до того год паскаля... Считайте сами - копейки. Правда из них последние полтора - промышленный код, но не суть. Тем более я там комментариев написал
0
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 11
15.12.2014, 01:40  [ТС] 13
Psilon, Вы так легко об этом общаетесь. Да, не спорю, может и копейки, но у меня ни опыта, ничего)... вот второй месяц как начал учиться на заочном отделении - это караул)
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
15.12.2014, 01:42 14
Stormantonio, да все придет, я на пятом курсе, при этом на первом для меня итерация по массиву была большой проблемой, а считать строкуиз файла - нереальным квестом. Как видите ничего страшного
0
0 / 0 / 0
Регистрация: 14.12.2014
Сообщений: 11
15.12.2014, 01:45  [ТС] 15
Psilon, ну этим вы меня обнадежили! Спасибо за помощь. Буду изучать
0
15.12.2014, 01:45
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
15.12.2014, 01:45
Помогаю со студенческими работами здесь

Найти все числа Армстронга от 1 до k
Помогите пожалуйста составить программу, в которой нужно найти все числа Армстронга от 1 до k.Очень...

Найти все числа Армстронга от 1 до k
Натуральное число, в записи которого n цифр, называется числом Армстронга, если сумма его цифр,...

Найти все числа Армстронга от 1 до k
ПОМОГИТЕ пожалуйста с задачей: Натуральное число в записи которого n цифр называется числом...

Найти все числа Армстронга от 1 до K
2)натуральное число, в записи которого n цифр, называется числом Армстронга, а если сумма его цифр,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Новые блоги и статьи
Создание макробота, как способа экономии времени и варианта ИИ.
Hrethgir 28.01.2025
Чисто теоретически, создание ИИ на ПК можно разделить на части. Создать бота отвечающего за железо (эмулирование вкл, выкл, мышь, клавиатура), другой бот осуществляет распознавание изображений,. . .
[Golang] 121. Best Time to Buy and Sell Stock
alhaos 28.01.2025
В этой задаче мы получаем слайс целых чисел, которые означают цену акции в разные моменты времени, и должны вернуть максимально возможную прибыль от купли продажи акции. / / . . .
Проектирование и моделирование
hw_wired 28.01.2025
Введение в моделирование Моделирование представляет собой один из фундаментальных методов научного познания, который позволяет изучать объекты и явления через создание их упрощенных аналогов. В. . .
Алгоритмы и исполнители
hw_wired 28.01.2025
Введение в алгоритмы В современном мире информационных технологий алгоритмы играют основополагающую роль в решении различных задач и автоматизации процессов. Алгоритм представляет собой точную. . .
Хранение информации
hw_wired 28.01.2025
Введение: Роль систем хранения информации в современном мире В современную эпоху цифровых технологий эффективное хранение информации становится одним из ключевых факторов успешного развития любой. . .
Обработка числовой информации
hw_wired 28.01.2025
Введение в обработку числовой информации В современном мире обработка числовой информации стала неотъемлемой частью как профессиональной деятельности, так и повседневной жизни. Электронные таблицы. . .
Мультимедиа
hw_wired 28.01.2025
Введение в мультимедийные технологии В современном мире мультимедийные технологии стали неотъемлемой частью нашей жизни, проникнув во все сферы человеческой деятельности. Термин "мультимедиа". . .
Обработка текстовой информации
hw_wired 28.01.2025
Введение в обработку текстовой информации В современном мире обработка текстовой информации играет фундаментальную роль в различных сферах человеческой деятельности. Текстовые редакторы стали. . .
Обработка графической информации
hw_wired 28.01.2025
Введение в компьютерную графику Компьютерная графика стала неотъемлемой частью современного цифрового мира, пройдя впечатляющий путь развития от простейших черно-белых изображений до сложных. . .
Python в Алгоритмике: Решение задач
hw_wired 28.01.2025
Введение в Python и Алгоритмику В современном мире программирование стало неотъемлемой частью образования и профессионального развития. Python зарекомендовал себя как один из самых популярных и. . .
Компьютер как универсальное устройство для работы с информацией
hw_wired 28.01.2025
Введение в устройство компьютера Компьютер представляет собой универсальное электронное устройство, предназначенное для автоматической обработки информации. В современном мире компьютер стал. . .
Информация и информационные процессы
hw_wired 28.01.2025
Понятие информации и ее виды В современном мире информация является одним из фундаментальных понятий, пронизывающих все сферы человеческой деятельности. Под информацией понимают любые сведения об. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru