牛客网IT校招全国统一模拟笔试(六月场)java方向

第二题:数星星

一闪一闪亮晶晶,满天都是小星星,牛牛晚上闲来无聊,便躺在床上数星星。
牛牛把星星图看成一个平面,左上角为原点(坐标为(1, 1))。现在有n颗星星,他给每颗星星都标上坐标(xi,yi),表示这颗星星在第x行,第y列。
现在,牛牛想问你m个问题,给你两个点的坐标(a1, b1)(a2,b2),表示一个矩形的左上角的点坐标和右下角的点坐标,请问在这个矩形内有多少颗星星(边界上的点也算是矩形内)。
输入描述:
第一行输入一个数字n(1≤n≤100000),表示星星的颗数。
接下来的n行,每行输入两个数xi和yi(1≤xi,yi≤1000),表示星星的位置。
然后输入一个数字m(1≤m≤100000), 表示牛牛询问问题的个数。
接下来m行,每行输入四个数字a1,b1,a2,b2(1≤a1<a2≤1000), (1≤b1<b2≤1000)
题目保证两颗星星不会存在于同一个位置。
输出描述:
输出一共包含m行,每行表示与之对应的每个问题的答案。
示例1
输入
4
1 1
2 2
3 3
1 3
4
1 1 2 2
1 1 3 3
2 2 3 3
1 2 2 3
输出
2
4
2

2

思路就是首先新建一个1001x1001的data数组,表示所有可能的坐标,然后输入每一个星星的坐标,把对应位置置为1 其余位置默认为0 

第二步,遍历data数组,累加,可以画图理解,就是加出来一个当前点到(1,1)点的矩形阵列。

第三部,根据给出的两个点,切割出对应的矩形阵列。同样画图理解,画出来很容易理解。

代码如下:

public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int n = in.nextInt();
		int[][] data = new int[1001][1001];
		for(int i=0;i


第一题:比扑克牌

牛牛与妞妞闲来无聊,便拿出扑克牌来进行游戏。游戏的规则很简单,两个人随机抽取四张牌,四张牌的数字和最大的取胜(该扑克牌总张数为52张,没有大小王,A=1,J=11,Q=12,K=13,每种数字有四张牌),现在两人已经分别亮出了自己的前三张牌,牛牛想要知道自己要赢得游戏的概率有多大。
输入描述:
输入包含两行,第一行输入三个整数a1,b1,c1(1≤a1,b1,c1≤13),表示牛牛亮出的扑克牌。
第二行输入三个整数a2,b2,c2(1≤a2,b2,c2≤13),表示妞妞所亮出的扑克牌。
输出描述:
输出一个数字x(保留4位小数),表示牛牛获胜的概率。
示例1
输入
3 5 7
2 6 8
输出

0.3905


尴尬,只通过了一部分。

我的思路是,利用线性规划,以给出的手牌差值作为变量,移动直线,求复合要求的比例。画图辅助。

不过有一点要注意的是,要赢就必须手牌总和大于另一人才行,小于等于都不算赢。

代码如下:但是只通过一部分,测试案例可以通过,可能是边界条件或者特殊情况没有考虑到。

public static void main(String[] args) {
		Scanner in = new Scanner(System.in);
		int[] arr1 = new int[3];
		int[] arr2 = new int[3];
		double sum1 = 0;
		double sum2 = 0;
		for(int i=0;i<3;i++){
			arr1[i] = in.nextInt();
			sum1+=arr1[i];
		}
			
		for(int i=0;i<3;i++){
			arr2[i] = in.nextInt();
			sum2+=arr2[i];
		}
		double x = sum1-sum2;	
		if(x>12){
			System.out.println(1.0000);
			return;
		}
		if(x<=-12){
			System.out.println(0.0000);
			return;
		}
		
		if(x<=0){
			double res = (12+x)*(13+x)/338;
			System.out.println((double)Math.round(res*10000)/10000);
		}
		if(x>0){
			double res = 1-(12-x)*(13-x)/338;
			System.out.println((double)Math.round(res*10000)/10000);
		}
			
		
		
		in.close();
	}


第三题:逛公园



/**
 * 又是晴朗的一天,牛牛的小伙伴们都跑来找牛牛去公园玩。但是牛牛想呆在家里看E3展,不想出去逛公园,可是牛牛又不想鸽掉他的小伙伴们,于是找来了公园的地图,
 * 发现公园是由一个边长为n的正方形构成的,公园一共有m个入口,但出口只有一个。公园内有一些湖和建筑,牛牛和他的小伙伴们肯定不能从他们中间穿过,所以只能绕行。
 * 牛牛想知道他需要走的最短距离并输出这个最短距离。 输入描述: 第一行输入一个数字n(1≤n≤1000)表示公园的边长
 * 接下来会给你一个n*n的公园地图,其中 .
 * 表示公园里的道路,@表示公园的入口,*表示公园的出口,#表示公园内的湖和建筑。牛牛和他的小伙伴们每次只能上下左右移动一格位置。
 * 输入保证公园入口个数m(1≤m≤10000)且所有的入口都能和出口相连。 输出描述: 输出牛牛需要行走的最短距离。 示例1 输入 10
 * .@....##@. 
 * ......#... 
 * ...@..#...
 * ###....... 
 * ....##..#. 
 * ...####... 
 * @...##....
 * #####..... 
 * ..##*####. 
 * #......... 
 * 输出 16
 * 
 * @author kafka
 *
 */

不会做。。。。。无向图的最短路径问题。。图方面的题是短板。伤

你可能感兴趣的:(java笔试题)