Вычислите, сколько способов вы можете добавить три числа, чтобы они равнялись 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, он выходит из цикла, Вот почему вы не получаете никаких значений. Но передумайте и свою логику.
Ответ 6
Если вы получили это задание как студент-информатик, вам, вероятно, захотелось бы это решить, используя Динамическое программирование.
Ответ 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