Как найти число амстронга

Найти числа Армстронга меньше N можно несколькими способами. Я выбрал следующий — создать матрицу, содержащую i строк (числа от 1 до 9) и j столбцов (степени от 1 до N.length(), то есть длины числа) в каждой ячейке которой находится число i в степени j, то есть например degreeMatrix[2][3] = 2^3 = 8

Собственно встает вопрос по созданию алгоритма перебора чисел и поиск среди найденных подходящих чисел.
Есть смысл искать только среди чисел которые не повторялись ранее — например от 1 до 9 — проверяются все, от 11 до 99 проверяются лишь 45 раз и только те, что идут друг за другом с условием что каждое число не меньше предыдущего и не больше следующего — 11, 12 .. 19, далее 22, 23 .. 29, далее 33, 34 .. 39 и таким образом до 99. С трех и более значными числами ситуация аналогична. Таким образом можно избежать огромного числа лишних проверок (для 2-ух значных почти в два раза уменьшается, для 3-х значных количество проверок менее 200 и т.д.)

Соответственно нужно реализовать алгоритм с использованием данных из матрицы (назовем ее проще М)

Для однозначных чисел все просто —

М(1,1), М(2,1) .. М(9,1) степень равна 1

Для двузначных как раз таки начинаются проблемы —

от 11 до 19 — М(1,2) + М(1,2), М(1,2) + М(2,2) .. М(1,2) + М(9,2)

от 22 до 29 — М(2,2) + М(2,2), М(2,2) + М(3,2) .. М(2,2) + М(9,2)

Требуется создать алгоритм суммирующий значения из матрицы в зависимости от длины числа (длин = количесвто чисел и их степень) с учетом правильной последовательности (каждое число не меньше предыдущего и не больше последующего, например 11, 129, 371 и т.д.)

Задачи, которые должен уметь решать каждый.

https://gbcdn.mrgcdn.ru/uploads/post/605/og_cover_image/643dd29c23889a508bdcc7c13fe0dc29

Любое квалифицированное собеседование со специалистом при приёме на работу строится примерно по одному и тому сценарию: сначала вас пытаются успокоить, задавая общие вопросы, часто к работе не имеющие никакого отношения. Потом начинается блиц из общих знаний по тематике будущей профессии, от простого к сложному, от слов к графикам и кодам. И вот когда в самом конце напряжение начнёт зашкаливать, вашу голову начнут раздирать сомнения относительно правильности ответов, собеседующий вас специалист предложит решить относительно простую даже для начинающего программиста задачу.

И вы обязательно решите, потому что наиболее типовые мы рассмотрим прямо сейчас.

Найти факториал

Задача с вычислением факториала числа рассматривается буквально с самого первого знакомства с циклами. Соответственно, как минимум 3 решения лежат именно в этой области. В Java, например, это for, dowhile, while. Но что, если надо найти минимум 4? Если нет привязки к языкам, то в старом добром Pascal можно вспомнить метки goto. Но ключевое же решение обычно на таких собеседованиях забывается. Рекурсия.

class Factorial {
    int fact(int n) {
        int result;

        if (n == 1)
            return 1;

        result = fact(n - 1) * n;
        return result;
    }
}

Factorial f = new Factorial();
int YourNumber = 100;

textViewInfo.setText(YourNumber + "! = “ + f.fact(YourNumber));

Обмен значениями

Даже если вы делаете первые шаги в программировании, вы уже догадываетесь, как значение переменной a присвоить переменной b, и наоборот. Правильно, через третью переменную с. А вот вам типичный вопрос из собеседования на позицию junior: проделайте эту же операцию, но без использования третьей переменной. Знаете ответ?

a = a + b;
b = a - b;
a = a - b;

Элементарный XOR.

Последовательность Фибоначчи

Задача из разряда «напугать новичка названием». Если вы ещё помните, что такое последовательность Фибоначчи, то половину задачи вы уже решили. Если нет, то наверняка вам интересно будет поискать алгоритм в следующих числах 1,1,2,3,5,8,13… И вывести все чила этой последовательности до 100.

Последовательность складывается крайне просто: каждое следующее число является суммой двух предыдущих. А записать это можно в тело простого цикла:

public static void main(String[] args) {
        int n = 101;
        int num1 = 1, num2 = 1;
        System.out.print(num1 + ", " + num2);
        int num12 = 2, i = 2;

        while (i < n) {
            num12 = num1 + num2;
            num1 = num2;
            num2 = num12;
            System.out.print(" " + num12);
            i++;
        }
    }

Проверка анаграммы

Вам даются произвольные два слова, каждое из которых может содержать сотню символов. От вас требуется понять, являются ли слова анаграммами.

Задача сводится скорее к внимательности, никакого оригинального решения можете не искать. Сначала проверяем длину двух слов и сбиваем все буквы в нижний регистр:

Public class AnagramCheck {
 public static boolean isAnagram(String word, String anagram){

       if(word.length() != anagram.length()){
              return false; 
       }

       char[] chars = word.toCharArray();

       for(char c : chars){
              int index = anagram.indexOf(c);

              if(index != -1){
                        anagram = anagram.substring(0,index) + anagram.substring(index +1, anagram.length());
              }else{
              return false;
              } 
 }

 return anagram.isEmpty();
}

После чего сортируем оба массива и выдаём результат

public static boolean iAnagram(String word, String anagram){
    char[] charFromWord = word.toCharArray();
    char[] charFromAnagram = anagram.toCharArray();

    Arrays.sort(charFromWord);
    Arrays.sort(charFromAnagram);

    return Arrays.equals(charFromWord, charFromAnagram);
}


public static boolean checkAnagram(String first, String second){
    char[] characters = first.toCharArray();
    StringBuilder sbSecond = new StringBuilder(second);

    for(char ch : characters){
        int index = sbSecond.indexOf("" + ch);

        if(index != -1){
            sbSecond.deleteCharAt(index);
        }else{
        return false;
        }
    }

return sbSecond.length()==0 ? true : false;
}

Ничего сложного, согласитесь?

Числа Армстронга

Ещё одна задачка на последовательности и страх неизвестных названий, с той лишь разницей, что о числах Фибоначчи слышало куда больше людей. Итак, перед вами следующие числа: 1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371. Что их объединяет и какое число будет следующим?

Это так называемые числа Армстронга, а секрет последовательности заключается в том, что каждое число является суммой составляющих цифр и степени значности. Т.е.

153 = 1^3 + 5^3 + 3^3

Придумали решение для поиска следующего числа? Вот моё предложение:

Проверяем каждое трёхзначное число (допускаем, что оно трёхзначное) с 372.

public class ArmstrongTest{ public static void main(String args[]) {
     System.out.println("Please enter a 3 digit number to find if its an Armstrong number:");
     int number = 371;

     while(isArmStrong(number+1)){
          i++;
     }

     System.out.println("Number : " + number + " is an Armstrong number");
}

А вот и сама проверка.

private static boolean isArmStrong(int NextArm) {
     int result = 0;
     int orig = NextArm;

     while(NextArm != 0){
          int digit = NextArm%10;
          result = result + digit*digit*digit;
          NextArm = NextArm/10; 
     }

     if(orig == result){
          return false;
     }

     return false;
}

Закончим ещё одним популярным заданием. Найдите ошибку в коде и напишите о ней в комментарии с предложением правильного варианта.


For the JAVA: профессия «Java-разработчик».

Как посчитать числа Армстронга?

Числом Армстронга называется такое натуральное число, которое равно сумме всех своих цифр, возведённых в степень, равную количеству цифр данного числа. Например, десятичное число 153 является числом Армстронга, т. к. 1*1*1 + 5*5*5 + 3*3*3 = 153.

Сколько трехзначных чисел Армстронга?

1, 2, 3, 4, 5, 6, 7, 8, 9, 153, 370, 371, 407, 1634, 8208, 9474, 54 748, 92 727, 93 084, 548 834, 1 741 725, 4 210 818, 9 800 817, 9 926 315, 24 678 050, 24 678 051, 88 593 477, 146 511 208, 472 335 975, 534 494 836, 912 985 153, 4 679 307 774.

Как найти числа Армстронга питон?

Число n цифр является числом Армстронга, если сумма каждой цифры, возведенная в степень числа без цифр, равна исходному числу. Определение числа Армстронга : ^n + b^n + c^n + d^n + … . и так далее.

Автор оригинала: Pankaj Kumar.

Привет! Сегодня давайте узнаем кое-что Интересное, номер Армстронга. Мы бы поняли, что это за число, а затем реализовали программу, чтобы проверить, является ли число числом Армстронга или нет.

Что такое число Армстронга?

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

Определение числа Армстронга : ^n + b^n + c^n + d^n + … . и так далее.

Примеры числа Армстронга

Пример 1: 153

Общее количество

Расчет (по цифрам^3 + 5^3 + + 125 +

Выполненный расчет непосредственно равен исходному числу. Следовательно, это число является числом Армстронга.

Пример 2: 548834

Общее количество

Расчет (цифра–^6 + 4^6 +8^6 + 8^6 + 3^6 + + 4096 + 262144 + 262144 + 729 +

Выполненные вычисления непосредственно равны исходному числу. Следовательно, это число является числом Армстронга.

Алгоритм проверки номера Армстронга

Чтобы проверить, является ли номер номером Армстронга, необходимо выполнить следующие действия

  1. Подсчитайте количество цифр в номере.
  2. Доступ к каждой цифре осуществляется одна за другой с помощью операций mod и division
  3. Каждая цифра повышается до степени числа цифр, и результат сохраняется в отдельной переменной
  4. Шаги 2 и 3 повторяются до тех пор, пока цифры не исчерпаются.
  5. Проверьте результат, рассчитанный с исходным номером
    • Если он совпадает: Номер Армстронга
    • В противном случае: Не номер Армстронга

Псевдокод для номера Армстронга

В приведенном ниже коде показан псевдокод для проверки того, является ли число номером Армстронга:

READ n
CALCULATE NO OF DIGITS n_digit
MAKE A COPY OF n
result=0

CHECK DIGIT BY DIGIT:
  WHILE n!=0
     GET CURRENT DIGIT : digit = n % 10
     UPDATE RESULT : result = result + digit^(n_digit)
     TRIM THE LAST DIGIT : n = n / 10
  ENDWHILE

CHECK FOR ARMSTRONG NUMBER:
   IF result==COPY OF n
      PRINT "ARMSTRONG NUMBER"
   ELSE
      PRINT "NOT AN ARMSTRONG NUMBER"

Теперь, когда мы знаем о том, что такое число Армстронга и шаги по его реализации, давайте осуществим проверку Армстронга строка за строкой.

1. Создайте исходные переменные

Сначала мы берем вход n , а затем вычисляем длину входа. Мы также храним копию входных данных, чтобы независимо от того, насколько сильно мы изменим исходный номер, у нас была копия, чтобы позже проверить номер Армстронга. Мы также инициализировали результат как 0.

Код для того же самого показан ниже:

n = input()
n_digit = len(n)
n=int(n)
copy_n=n
result = 0

2. Прохождение по номеру и обновление результата

Чтобы получить доступ к каждой цифре, мы берем модуль числа ( mod 10), чтобы извлечь последнюю цифру числа. Следующий шаг включает в себя обновление результата как суммы предыдущего результата и цифры, возведенной в степень числа цифр.

Последний и последний шаг, который мы делаем, – это делим число на 10, чтобы удалить последнюю цифру из числа. Тот же процесс повторяется до тех пор, пока в номере не останется больше цифр.

Код для того же самого показан ниже:

while(n!=0):
    digit = n%10
    result=result+pow(digit,n_digit)
    n=int(n/10)

3. Проверка, является ли номер номером Армстронга или нет

Последний шаг-проверить копию числа, которое мы создали ранее, и вычислить результат, чтобы окончательно определить, является ли это число номером Армстронга или нет. Код для того же самого показан ниже:

if(result==copy_n):
    print("Armstrong Number!")
else:
    print("Not an Armstrong Number!")

Выходные образцы для кода

На данный момент я протестировал программу для четырех входов. Результаты для всех четырех показаны ниже:

Номер 1: 153

Номер 2: 121

121
Not an Armstrong Number!

Номер 3: 548834

Номер 4: 9468632

9468632
Not an Armstrong Number!

Вывод

Поздравляю! Вы успешно узнали о числе Армстронга и реализовали то же самое!

Но не останавливайтесь на достигнутом! Продолжайте читать и учиться!

Armstrong Number in C++

Introduction to Armstrong Number in C++

A number that is equal to the sum of the cube of its digit is an Armstrong Number. A number is called as an Armstrong number if the sum of cube of its all digit is equal to that number. In this article, we are going to discussed how to check the Armstrong number using the C++ programming language. Some of the Armstrong numbers are – 0, 1, 153, 407. Let’s check it using mathematical computation.

0 = 0 * 0 * 0 = 0
1 = 1 * 1 * 1= 1
153 = (1 * 1 * 1) + (5 * 5 * 5) + (3 * 3 * 3) = 1 + 125 + 27 = 153
407 = (4 * 4 * 4) + (0 * 0 * 0) + (7 * 7 * 7) = 64 + 0 + 343 = 407

Algorithm to Check Armstrong Number

The algorithm to check armstrong number in C++ are given below:

Step 1: Enter Number

Step 2: Find the cube of each digit of entered number

Step 3: Add the cube of all the digits

Step 4: If the output of step 3 is equal to the entered number i.e. Step 1. Then the print entered number is Armstrong number.

Step 5: If the output of step 3 is equal to the entered number i.e. Step 1. Then print entered number is not an Armstrong number.

Examples of Armstrong Number

In this section, we are going to discussed how to check Armstrong’s number using various methods.

Example #1 – Using a while loop

Code:

#include <iostream>
using namespace std;
int main()
{
int num, r, sum=0, temp_num;
cout << "Enter number to check Armstrong number ";
cin >> num;
temp_num = num;
while(num > 0)
{
r = num % 10;
sum = sum + (r * r * r);
num = num / 10;
}
if(temp_num == sum)
cout << "Entered number is Armstrong Number." << endl;
else
cout << "Entered number is not Armstrong Number." << endl;
return 0;
}

Output:

Armstrong Number in C++ eg1

Armstrong Number in C++ eg1.1

Here we have written a program to check Armstrong number using a while loop, first it asks a user to enter a value. Then the entered number is copied into temp_num. Here temp_num is used to compare the result with the original. while condition checks whether the number is greater than 0 or not. If the number is greater than 0, it executes the statements following a while. The last digit is separated from num by performing num%10. Then the digit is cubed and stored the sum. Then the last digit is discarded using num/10. The process is performed for all digit in the number. Then temp_num and num are compared, if both are equal it will print Entered number is Armstrong Number. If both are not equal it will print Entered number is not Armstrong Number.

Example #2 – Using a do-while loop

Code:

#include <iostream>
using namespace std;
int main()
{
int num, r, sum=0, temp_num;
cout << "Enter number to check Armstrong number ";
cin >> num;
temp_num = num;
do
{
r = num % 10;
sum = sum + (r * r * r);
num = num / 10;
} while(num > 0);
if(temp_num == sum)
cout << "Entered number is Armstrong Number." << endl;
else
cout << "Entered number is not Armstrong Number." << endl;
return 0;
}

Output:

eg2

eg2.1

Here we have written a program to check Armstrong’s number using the do-while loop. The working is the same as we have discussed in example 1. The only difference is in 1st example if first checks the condition i.e num > 0. and here in this example the same condition is tested at the end of the loop.

Example #3 – Using for loop

Code:

#include <iostream>
using namespace std;
int main()
{
int lower_limit, upper_limit, i, r, sum, temp_num;
cout << "Enter lower limit ";
cin >> lower_limit;
cout << "Enter uppee limit ";
cin >> upper_limit;
cout << "List of Armstrong numbers between " << lower_limit << " and " << upper_limit << endl;
for(i = lower_limit; i <= upper_limit; i++)
{
sum = 0;
temp_num = i;
for(; temp_num >0; temp_num /= 10)
{
r = temp_num % 10;
sum = sum + (r * r * r);
}
if(sum == i)
cout << i << endl;
}
return 0;
}

Output:

eg3

Here we have written a program to print the Armstrong number between two numbers entered by the users. The lower limit takes the minimum number and the upper limit takes the maximum number. If the upper limit number is small then the lower limit then it throws an error. The upper limit number should be greater than the lower limit. Each number between the interval is stored in temp_num. Then each digit of the number is retrieved in variable r and then finds the cube. The result of the cube is then added to the result of the last digit. Likewise, each digit is traversed, when traversing is done, the sum is compared with the original number i.e. i. If they are equal then it prints the number.

Recommended Articles

This is a guide to Armstrong Number in C++. Here we discuss the introduction and algorithm of Armstrong Number in C++ along with examples and code implementation. You can also go through our other related articles to learn more –

  1. C++ Garbage Collection
  2. Storage Class in C++
  3. Access Specifiers in C++
  4. Armstrong Number in C#

Понравилась статья? Поделить с друзьями:

Не пропустите также:

  • Как найти событие в одноклассниках
  • Коммуникационная стратегия как составить
  • Неверная запись в трудовой сделана неверно как исправить
  • Как найти человека если знаешь его имя
  • Как найти второй наушник беспроводной айфон

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии