/* © MATTO MATTI 2018 http://mattomatti.com/pl/a0143 napisane przy użyciu Visual Studio Community 2015 2018-08-22 v 1.0 */ using System; namespace plcode2cs { class Program { static int silnia(int n) { if (n <= 1) return 1; return n * silnia(n - 1); } static int liczRozwiazania(int n, int k, int x, int[] liczniki, int _n, int _k) { if (n == 1 && x >= 1 && x <= k) { int w = silnia(_n); liczniki[x - 1]++; for (int i = 0; i < _k; i++) w /= silnia(liczniki[i]); liczniki[x - 1]--; return w; } else if (n == 1 || x < 0 || x < n || x > k * n) return 0; int ile = 0; for (int i = Math.Min(x, k); i >= 1; i--) { liczniki[i - 1]++; ile += liczRozwiazania(n - 1, i, x - i, liczniki, _n, _k); liczniki[i - 1]--; } return ile; } static int liczRozwiazania(int n, int k, int x) { int[] liczniki = new int[k]; int w = liczRozwiazania(n, k, x, liczniki, n, k); return w; } static void Main(string[] args) { Console.Write("Ile jest kostek?\n n = "); int n = Convert.ToInt32(Console.ReadLine()); Console.Write("Ile ścian mają kostki?\n k = "); int k = Convert.ToInt32(Console.ReadLine()); Console.Write("Podaj sumę oczek\n x = "); int x = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Znaleziono: {0}", liczRozwiazania(n, k, x)); Console.ReadKey(); } } }