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

一,程序题
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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值