Advertisement
yko0

Perestanovka P[]

Dec 4th, 2014
255
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.61 KB | None | 0 0
  1. /*
  2.  * 2. Перестановкой P[1..n] размера n называется набор чисел от 1 до n, расположенных в определенном порядке.
  3.  * При этом в нем должно присутствовать ровно один раз каждое из этих чисел. Примером перестановок являются
  4.  * 1,3,4,5,2 (для n=5) и 3,2,1 (для n=3), а, например, 1,2,3,4,5,1 перестановкой не является, так как
  5.  * число 1 встречается два раза.
  6.  * Число i называется неподвижной точкой для перестановки P, если P[i] = i. Например, в перестановке
  7.  * 1,3,4,2,5 ровно две неподвижных точки: 1 и 5, а перестановка 4,3,2,1 не имеет неподвижных точек.
  8.  * Даны два числа: n и k. Найдите количество перестановок размера n с ровно k неподвижными точками.
  9.  */
  10.  
  11. class perestanovka {
  12.        
  13.     static long factr (int nk) {
  14.         long res;
  15.         if (nk == 1) return 1;
  16.         res = factr(nk-1)*nk;
  17.         return res;
  18.     }
  19.                
  20.     static void calc (int n, int k) {
  21.         if (n <= k || k < 0) {
  22.             System.out.println("Размер должен быть больше количества неподвижных точек, n>k>=0");
  23.             return;
  24.         }
  25.         int nk = n - k;
  26.         System.out.println("Количество перестановок размера n="+n+" с k="+k+" неподвижными точками равно: "+factr(nk));
  27.     }
  28.        
  29.     public static void main(String args[]) {
  30.        
  31.         // кол-во перестановок для набора n равно факториал(n);
  32.         // неподвижные точки НЕ влияют на кол-во перестановок размера (n-(кол-во неподвижных точек))
  33.         // другими словами кол-во перестановок для набора 123 (равное 6) не зависит от того
  34.         // что в конце каждого варианта мы дописали бы "555555"
  35.          
  36.         try {
  37.             int n = Integer.parseInt(System.console().readLine("Введите размер n = " ));
  38.             int k = Integer.parseInt(System.console().readLine("Введите размер k = " ));
  39.             calc(n,k);
  40.         } catch (NumberFormatException e) {
  41.             System.out.println("Значения для n и k должны неотрицательными int");
  42.             return;
  43.         }
  44.     }
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement