2017. 圆周排列

一、题目

Problem #2017 - ECNU Online Judge

2017. 圆周排列_第1张图片

二、思路

一开始以为是全排列+验证的问题,后来超时,然后转向组合排列思考,结果AC了

首先要知道:n个不同元素的圆排列有(n-1)!个

证明:将个n 元素中的某个元素看成是固定的,剩下的 n-1个元素所作成的线性排列,其总数就相当于n个元素的圆排列总数。因此,n 个不同元素的圆排列总数为(n-1)!,自己草稿纸比划比划

最后就是组合排列了C(n,r)✖A(r-1)

三、代码

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        while (sc.hasNext()) {
            int n = sc.nextInt();
            int r = sc.nextInt();
            if (r == 0)
                System.out.println(1);
            else {
                System.out.println(C(n, r));
            }
        }
    }

    public static long C(int n, int r) {
        long ans = 1;
        for (int i = n; i >= n - r + 1; i--) {
            ans *= i;
        }
        return ans / r;
    }
}

你可能感兴趣的:(题解,算法,题解)