Loading...
itonev avatar itonev 22 Точки

[Homework] C Loops Формула за n!/k!

Здравейте, 

За да изчисля  N! / (K! * (N-K)!)  успешно ползвах формулата от тук - https://en.wikipedia.org/wiki/Binomial_coefficient#Multiplicative_formula  тоест произведението на израза  (n+1-i)/i  за i от 1 до k;

Вижда се, че двете формули са близки, просто в едната формула израза (n-k) == 0.

Въпросът е как трябва да редактирам горната формула, за да калкулирам  n!/k!.

Тагове:
0
C Programming
wallbanger avatar wallbanger 54 Точки

Здравей!

Когато n > k, горната формула може да се изрази с цикъл от k+1 до n. Нищо сложно.

Поздрави!

0
itonev avatar itonev 22 Точки

Здравей,

Благодаря за отговора.

За да изчисля n!/k!  разписах следното, но не дава очаквания резултат.

Все още не мога да се ориентирам къде е грешката.

int main() {
	int n, k,i;
	double u = 1;;

	printf("N>>");
	scanf("%d", &n);
    
    printf("K>>");
    scanf("%d", &k);

	for(i=k+1;i<=n;i++) {
		u*=((double)(n+1-i)/i);
	}
	printf("%.1lf", u);
	return 0;
}

 

0
20/10/2015 23:44:24
GerganaYord avatar GerganaYord 78 Точки

Здравей,

аз те обърках малко за предишния ти въпрос, за което се извинявам, но този тук е по-лесен отколкото ти го правиш.

Всъщност n! / k! e произведението на числата от (к+1) до n, тъй като к! ти се съкращава и от числителя и от знаменателя;

Тоест твоето U не е необходимо да е double, a long и е просто u=u*i за  i ot k+1 do n

0
v.nikolov avatar v.nikolov 17 Точки

Здравейте, ето и друг вариант:

int factorialN = 1;
int factorialK = 1;
for (int i = 1; i <=n; i++)
{
   factorialN *= i;
   if (i<=k)
      {
         factorialK *= i; 
      }
}

 

0
itonev avatar itonev 22 Точки

Благодаря много и на двамата :)

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