2017年 百度校招《数据挖掘工程师》笔试题---程序题

来源:互联网 发布:noppoo choc mac 编辑:程序博客网 时间:2024/06/11 23:58

一,程序题
1,餐厅里有一张圆形的桌子,桌子上有n个座位,座位按照顺序从1到n编号,而且n号座位和1号座位相邻,每个座位都不一样。m个人一起去这家餐厅吃饭,为了更好地就餐,他们不想坐得太过拥挤,因此,不允许有任意两个相邻。
您知道一共有多少种不同的就坐方法吗?最后答案可能非常大,输出答案除以1000000007之后对的余数。两种坐法不一样当前仅当存在一个人,在两种坐法中他坐在了不同的位置上。

2,输入:
第一行一个数字T(T<=10)表示测试数据的组数。对于每组测试数据,输入两个数n和m (1<=n,m<=100000)。

3,输出:
每组数据输出一行,就坐的方案数,如果不存在合法的就坐方案,方案数为0。

样例输入:
4
3 1
3 2
4 2
50 10

3
0
4
128093084

二,程序题(java) AC了的。

import java.util.*;public class Main{    public static void main(String [] agrs)    {        Scanner scan=new Scanner(System.in);        int num;        while(scan.hasNext())        {            num=scan.nextInt();            for(int i=0;i<num;i++)  //这里表示有num组测试数据            {                long sum;                long total=1;                int n=scan.nextInt();                int m=scan.nextInt();                if(m>n/2)  //当给定m大于n/2时,直接输出0。因为总会有两个人是相邻位置的。                {                    sum=0;                    System.out.println(sum);                    continue;                }                for(int j=n-m;j>=n-m*2+1;j--)                {                    total=total*j;                }                sum=(total)/(n-m);   //公式为N=( n/(n-m))*(n-m)(n-m-1)...(n-m-(m-1))   N表示总的方案数                sum=sum*n;                sum=sum%1000000007;                System.out.println(sum);            }        }    }}

三,运行结果:
这里写图片描述

1 0
原创粉丝点击