Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * 2. Перестановкой P[1..n] размера n называется набор чисел от 1 до n, расположенных в определенном порядке.
- * При этом в нем должно присутствовать ровно один раз каждое из этих чисел. Примером перестановок являются
- * 1,3,4,5,2 (для n=5) и 3,2,1 (для n=3), а, например, 1,2,3,4,5,1 перестановкой не является, так как
- * число 1 встречается два раза.
- * Число i называется неподвижной точкой для перестановки P, если P[i] = i. Например, в перестановке
- * 1,3,4,2,5 ровно две неподвижных точки: 1 и 5, а перестановка 4,3,2,1 не имеет неподвижных точек.
- * Даны два числа: n и k. Найдите количество перестановок размера n с ровно k неподвижными точками.
- */
- class perestanovka {
- static long factr (int nk) {
- long res;
- if (nk == 1) return 1;
- res = factr(nk-1)*nk;
- return res;
- }
- static void calc (int n, int k) {
- if (n <= k || k < 0) {
- System.out.println("Размер должен быть больше количества неподвижных точек, n>k>=0");
- return;
- }
- int nk = n - k;
- System.out.println("Количество перестановок размера n="+n+" с k="+k+" неподвижными точками равно: "+factr(nk));
- }
- public static void main(String args[]) {
- // кол-во перестановок для набора n равно факториал(n);
- // неподвижные точки НЕ влияют на кол-во перестановок размера (n-(кол-во неподвижных точек))
- // другими словами кол-во перестановок для набора 123 (равное 6) не зависит от того
- // что в конце каждого варианта мы дописали бы "555555"
- try {
- int n = Integer.parseInt(System.console().readLine("Введите размер n = " ));
- int k = Integer.parseInt(System.console().readLine("Введите размер k = " ));
- calc(n,k);
- } catch (NumberFormatException e) {
- System.out.println("Значения для n и k должны неотрицательными int");
- return;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement