Вычислите, сколько способов вы можете добавить три числа, чтобы они равнялись 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);
        }
    }
}

Ответ 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