C# Найдите наибольшее число, которое не делится на 2, 3, 5 и 7, но меньше 1000 - PullRequest
4 голосов
/ 26 мая 2020
  public void ListTheBiggestNumberNotDividedBy2357()
    {
        for (int i = 1; i < 1001; i++)
        {
            if (!(i % 2 == 0) && !(i % 2 == 0) && !(i % 5 == 0) && !(i % 7 == 0))
            {
                Console.WriteLine(i);
            }
        }
    }

Как вывести только самое большое число? Я пробовал использовать Math.Max ​​(), но думаю, это не то, что мне следует писать.

Ответы [ 4 ]

6 голосов
/ 26 мая 2020

(Обратите внимание, что я исправил вашу опечатку !(i % 2 == 0) && !(i % 2 == 0), которая должна быть !(i % 2 == 0) && !(i % 3 == 0).)

Медленный способ

Сохраняйте currentBiggest и обновляйте его каждый раз, когда вы найдите такой номер:

public void ListTheBiggestNumberNotDividedBy2357()
{
    int currentBiggest = 0;
    for (int i = 1; i < 1001; i++)
    {
        if (!(i % 2 == 0) && !(i % 3 == 0) && !(i % 5 == 0) && !(i % 7 == 0))
        {
            currentBiggest = i;
        }
    }
    Console.WriteLine(currentBiggest);
}

Быстрый путь

Начать с 1000 и go вниз. Выведите первое найденное число и break;, которое останавливает l oop.

public void ListTheBiggestNumberNotDividedBy2357()
{
    for (int i = 1000; i > 0; i--)
    {
        if (!(i % 2 == 0) && !(i % 3 == 0) && !(i % 5 == 0) && !(i % 7 == 0))
        {
            Console.WriteLine(i);
            break;
        }
    }
}
6 голосов
/ 26 мая 2020

Вы можете попробовать простой Linq , чтобы запрашивать числа в диапазоне (1000..0]:

  using System.Linq;

  ...

  // let's extact divisors: it's easy to make a mistake like in the code in the question:
  // !(i % 2 == 0) instead of !(i % 3 == 0)
  int[] divisors = new int[] { 2, 3, 5, 7 };

  int result = Enumerable
    .Range(0, 999) // 999 - smaller than 1000
    .Reverse()
    .First(item => divisors.All(d => item % d != 0));

  Console.WriteLine(result);

Результат:

  997 
0 голосов
/ 26 мая 2020

Это может быть хорошим подходом:

class Program
{
    static void Main(string[] args)
    {
        var result = FindBiggestNumberNotDivisible(new int[] { 2, 3, 5, 7 }, 1000);

        Console.WriteLine(result);
    }

    public static int FindBiggestNumberNotDivisible(IEnumerable<int> divisibleNumbers, int maxNumber)
    {
        for (int i = maxNumber - 1; i > 0; i--)
            if (divisibleNumbers.All(x => i % x != 0))
                return i;

        return -1;
    }
}

Вывод:

997

0 голосов
/ 26 мая 2020

Я полагаю, вы можете создать переменную с именем biggestNumber вне for l oop, переписать эту переменную в for l oop, пока она не достигнет 1000, и в конце вернуть biggestNumber (и сделайте что-нибудь с этим значением). Не уверен, что это лучший способ go, но это один из способов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...