Programowanie i algorytmy

Dwusilnia w C++

Zad. 2. Napisz funkcję, która dla nieujemnej liczby n, takiej, że

{tex}0\leq n\leq 30{/tex}

wyznaczy dwusilnię.

 

Rozwiązanie. 

Dwusilnię dla dowolnej liczby naturalnej n wyznaczamy według wzoru:

{tex}n!! = \left\{\begin{matrix} 1 &,\ dla\ n = 0\\ n \cdot (n-2) \cdot (n-4) \cdot ... \cdot 4 \cdot 2 &,\ dla\ n\; parzystego\; dodatniego \\n \cdot (n-2) \cdot (n-4) \cdot ... \cdot 3 \cdot 1 &,\ dla\; n\; nieparzystego\end{matrix}\right.{/tex}

Dla przykładu policzmy:

{tex}5!! = 5 \cdot 3 \cdot 1 = 15{/tex}

{tex}6!! = 6 \cdot 4 \cdot 2 = 48{/tex}

Dla liczby parzystej n liczymy iloczyn wszystkich liczb parzystych dodatnich niewiększych od tej liczby, natomiast dla nieparzystej iloczyn wszystkch liczb naturalnych nieparzystych niewiększych od n.

Rozwiązanie
 
#include <cstdlib>
#include <iostream>
using namespace std;
 
long long dwusilnia(unsigned int n)
{
  long long ds = 1; //zmienna przechowująca kolejne mnożenia
 
  for(;n>1;n-=2)
    ds*=n;
 
  return ds; 
}
 
int main()
{
  unsigned int n;
 
  cout<<"Podaj liczbę: ";
  cin>>n;
  cout<<"Dwusilnia z liczby "<<n<<" wynosi "<<dwusilnia(n)<<endl;
 
  system("pause");
  return 0;
}