c# определите, счастлив ли номер или нет - PullRequest
0 голосов
/ 14 февраля 2020

Я пытаюсь понять, как мне узнать, является ли число «Счастливым числом» или нет, я знаю, что мне нужно проверить, больше ли числа ди git и ди git в самом старшем номере, чем числа в середине `пример: заданное число: 63240 единица измерения: 6 число в самом высоком месте: 0 оба они больше 3 и 2 и 4 (в середине)? да, результат: true (для этого случая)

the quation is: write a program that get a number from user, the program will print if the given number from the user is a happy number or not

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

обратите внимание, что единственный класс, который мы выучили таким толстым, - это математика (даже не строка да), которую мы также выучили пока и для, но пока ничего. .

Я также знаю, что для того, чтобы go через все ди git в данном номере, мне нужно использовать while l oop, но я не знаю, как его использовать, чтобы использовать чтобы получить ответ ..

мой код:

int number;
int units;
int highestDigitLoc; 

bool isHappyNumber = true;
int count = 0;

Console.WriteLine("enter a number:");
number = int.Parse(Console.ReadLine());

while(number > 0)
{
    count++;

    units = number % 10;
    highestDigitLoc = number / 10;
}

спасибо

Ответы [ 2 ]

1 голос
/ 14 февраля 2020

Эта ссылка объясняет, что такое Happy Number, простым способом. По сути, вы должны продолжать суммировать квадрат каждого числа di git, присутствующего в числе, до тех пор, пока результат не станет равным 1. Этот процесс может бесконечно продолжаться go, но, к счастью, мы точно знаем, что если сумма равна 4, она никогда не будет результат в счастливый номер. Поэтому мы можем сделать следующее:

private static bool IsHappy(int n)
{
    if (n == 1)
        return true;
    else if (n == 0 || n == 4)
        return false;
    else
        return IsHappy(SumDigitSquares(n));
}

private static int SumDigitSquares(int n)
{
    if (n < 10)
        return n * n;
    else
        return SumDigitSquares(n % 10) + SumDigitSquares(n / 10);
}

Использование:

bool result = IsHappy(63240); //false
0 голосов
/ 14 февраля 2020

Ну, ваш вопрос очень неопределенный , однако мы можем превратить число в массив цифр int[] digits

using System.Linq;

...

int[] digits = null;

while (true) {
  Console.WriteLine("enter a number:");

  // string : let's solve for arbitrary long numbers (no necessary int)
  string number = Console.ReadLine().Trim();

  if (string.IsNullOrEmpty(number)) 
    Console.WriteLine("Empty string is not enough");
  else if (number.All(c => c >= '0' && c <= '9')) {
     // This code preserves leading zeroes
     digits = number.Select(c => c - '0').ToArray();
     // This code removes leading zeroes
     //digits = number
     //  .SkipWhile(c => c == '0')
     //  .Select(c => c - '0')
     //  .DefaultIfEmpty()
     //  .ToArray();

    break;
  } 
  else
    Console.Write("Not a valid integer value. Please, try again."); 
}

Тогда мы можем использовать это int[] digits для реализации любого logi c требуется . Обратите внимание, что мы сохраняем начальные нули :

"63240"  -> int[] {6, 3, 4, 2, 0}
"063240" -> int[] {0, 6, 3, 4, 2, 0}

например

пусть число будет счастливым, если и только если

  1. Содержит не менее 3 цифр (чтобы иметь средние цифры)
  2. Макс. Первая и последняя цифры больше чем максимум всех остальных цифр

В нашем случае с 63240

  1. 63240 есть 5 цифр, условие выполняется
  2. Max(0, 6) == 6 > Max(3, 2, 4) == 4, условие выполняется

Код:

bool isHappyNumber =
  digits.Length >= 3 &&
  Math.Max(digits[0], digits[digits.Length - 1]) > 
    digits.Skip(1).Take(digits.Length - 2).Max();

Редактировать: Давайте реализуем isHappyNumber со старым добрым for loops:

int maxFirstAndLast = digits[0] > digits[digits.Length - 1]
  ? digits[0]
  : digits[digits.Length - 1];

int maxMiddle = 0;

for (int i = 1; i < digits.Length - 1; ++i)
  if (digits[i] > maxMiddle) then
    maxMiddle = digits[i];

bool isHappyNumber =
  digits.Length >= 3 &&
  maxFirstAndLast > maxMiddle; 
...