Loading...
popopo avatar popopo 1 Точки

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);

        }
    }
}

 

Тагове:
0
Programming Basics
yvette avatar yvette 4 Точки

i<=n(result)   и така надолу във всички цикли.

Логиката е такава : 

  i + j + k + l + m = result

result + 0 + 0+ 0 + 0 = result

и така докато провери всички възможни комбинации. Ти го лимитираш само до 10, без да е казано какъв трябва да е резултатът.

 

 

1
22/11/2018 18:56:59
popopo avatar popopo 1 Точки

Извинявай, не те разбрах, би ли ми обяснила още ведниж?

Благодаря предварително

0
yvette avatar yvette 4 Точки

В условията на циклите си ограничила 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, няма как да стигнеш до тази комбинация... пиши ако не си ме разбрала да пратя кода :)

0
23/11/2018 10:21:21
kolioi avatar kolioi 641 Точки

Много добре! А трябва ли всеки цикъл да го въртим до n? Я помисли. Така не е грешно, но може да си спестим малко излишни сметки (и време). Например, ако n=20 и сме стигнали до i=5, j=3, k=6, l=4  има ли смисъл да променяме m от 0 до 20 или може да го ограничим само до 2?

0
yvette avatar yvette 4 Точки

Прав си, да.. може и така.. има различни начини да се напише дадена програма... още съм Basic и това ми дойде първо на ума. :)

0
kolioi avatar kolioi 641 Точки

Ами то така се прави - първо правиш работещо решение, след това го подобряваш и оптимизираш. Пробвай това

for (int i = 0; i <= n; i++)
	for (int j = 0; i + j <= n; j++)
		for (int k = 0; i + j + k <= n; k++)
			for (int l = 0; i + j + k + l <= n; l++)
				for (int m = 0; i + j + k + l + m <= n; m++)
					if (i + j + k + l + m == n)
						counter++;

Пусни го за n=100, след това пусни твоето решение и сравни времето за изпълнение.

0
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.