Combinations/Nested Loops/C#
Здравейте, колеги,
Дали можете да предположите защо при този код хващам само числата до 100 000/хванах го като сложих брояч на първия цикъл/.
Благодаря предварително!
Условието е:
5. Комбинации
Напишете програма, която изчислява колко решения в естествените числа (включително и нулата) има
уравнението:
x1 + x2 + x3 + x4 + x5 = n
Числото n е цяло число и се въвежда от конзолата.
Моят код е:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Combination
{
class Program
{
static void Main(string[] args)
{
int result = int.Parse(Console.ReadLine());
int counter = 0;
int counterall = 0;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
for (int k = 0; k < 10; k++)
{
for (int l = 0; l < 10; l++)
{
for (int m = 0; m < 10; m++)
{
//counterall++;
if (i+j+k+l+m==result)
{
counter++;
}
}
}
}
}
}
Console.WriteLine(counter);
//Console.WriteLine(counterall);
}
}
}
Извинявай, не те разбрах, би ли ми обяснила още ведниж?
Благодаря предварително
В условията на циклите си ограничила i,j,k,l,m само до 10 (i<10). Не знам от къде си стигнала до това 10, ноо то не е правилно, защото ограничаваш възможните комбинации.
Трябва i <= result , за да се проверят всички случаи... част от случаите включват i да е равно на резултата, а j,k,l,m да са равни на 0. Но като го ограничаваш така до 10 ще получиш само част от отговорите... Не знам как иначе да го обясня.. напиши си уравнението.. да речем се въвежда резултат 20 и трябва да провериш възможните комбинации, които дават този резултат... първата от тях е : 20(i) + 0(j) + 0(k) + 0(l) + 0(m) = 20... но като ограничаваш i до 10, няма как да стигнеш до тази комбинация... пиши ако не си ме разбрала да пратя кода :)
Много добре! А трябва ли всеки цикъл да го въртим до n? Я помисли. Така не е грешно, но може да си спестим малко излишни сметки (и време). Например, ако n=20 и сме стигнали до i=5, j=3, k=6, l=4 има ли смисъл да променяме m от 0 до 20 или може да го ограничим само до 2?
Прав си, да.. може и така.. има различни начини да се напише дадена програма... още съм Basic и това ми дойде първо на ума. :)
Ами то така се прави - първо правиш работещо решение, след това го подобряваш и оптимизираш. Пробвай това
Пусни го за n=100, след това пусни твоето решение и сравни времето за изпълнение.