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

时间:2021-10-18 09:48:23

一,程序题
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);
}
}
}
}

三,运行结果:
2017年 百度校招《数据挖掘工程师》笔试题---程序题