Подтвердить что ты не робот

Вычислите, сколько способов вы можете добавить три числа, чтобы они равнялись 1000

Мне нужно создать программу, которая вычисляет, сколько способов вы можете добавить три числа, чтобы они равнялись 1000.

Я думаю, что этот код должен работать, но он ничего не выписывает. Что я делаю не так? Любые советы или решения?

using System;

namespace ConsoleApp02
{
    class Program
    {
        public static void Main(string[] args)
        {
            for(int a = 0; a < 1000; a++)
            {
                for(int b = 0; b < 1000; b++)
                {
                    for(int c = 0; c < 1000; c++)
                    {
                        for(int puls = a + b + c; puls < 1000; puls++)
                        {
                            if(puls == 1000)
                            {
                                Console.WriteLine("{0} + {1} + {2} = 1000", a, b, c);
                            }
                        }
                    }
                }
            }
            Console.ReadKey(true);
        }
    }
}
4b9b3361

Ответ 1

Ваша внутренняя петля (итерация переменной puls) на самом деле не имеет никакого смысла, и из-за условия на ней (puls < 1000) Console.WriteLine никогда не запускается.

Возможно, вы должны проверить, является ли A + B + C 1000.

Кроме того, вы обнаружите, что вам могут не хватать пары отдельных комбинаций чисел из-за границ ваших циклов (в зависимости от оператора проблемы).

Ответ 2

В отдельном примечании эта конкретная реализация, в то время как она будет работать (с изменениями, предложенными другими ответами), является довольно хитом производительности, так как сложность вашего алгоритма - O (n ^ 3). Другими словами, вы просматриваете самую внутреннюю проверку за один раз.

Здесь намек на то, как вы можете оптимизировать его, по крайней мере, в O (n ^ 2), или только за одно миллионные итерации: для каждой пары a и b, сгенерированных два внешних для петель, только одно значение для c, которое приведет к 1000.

Ответ 3

Вопрос не указывает, что отрицательные числа недопустимы. Ответ бесконечен.

Ответ 4

Вам не нужен внутренний цикл.

if (a+b+c == 1000)
   write

Ответ 5

В вашем последнем внутреннем цикле "int puls = a + b + c; puls < 1000; puls ++" вы гарантируете, что импульсы никогда не равны 1000, если импульсы не менее 1000, он выходит из цикла, Вот почему вы не получаете никаких значений. Но передумайте и свою логику.

Ответ 7

Как только внутренняя точка цикла достигает 1000, она вырывается из цикла for и даже не проверяет, равна ли 1000 в выражении "if".

Ответ 8

Этот код не вернет ответа.

Внутренний элемент для цикла добавляет a + b + c и помещает результат в импульсы. Тем не менее, вы остановите цикл до того, как импульсы достигнут 1000, а затем проверите внутри оператора for, чтобы узнать, равны ли импульсы 1000. Таким образом, вы не получите ответ.

Просто испытайте импульсы против 1000 во внутреннем контуре. Почему?

Ответ 9

Вы можете заменить свою внутреннюю петлю только на тест, если (a + b + c == 1000) {...}. Затем вы можете добавить оптимизацию, например: - как только сумма была найдена с помощью комбинации, нет необходимости продолжать внутренний цикл.

Ответ 10

Код не распространяется на следующие случаи

  • 1000 + 0 + 0
  • 0 + 10000 + 0
  • 0 + 0 + 10000

Внутренний самый цикл должен быть , если скорее для.

Вам не нужно {}, если в цикле или в условии if есть только один оператор.

EDIT: Удаленные ответы на код

Ответ 11

Попробуйте следующее:

{
    for(a=0;a<=500;a++)
    { 
        for (b=a;b<=500;b++)
        {
            c=1000-(a+b);
            count