网易测试笔试

1、

时间限制:1

空间限制:32768K

牛牛去犇犇老师家补课,出门的时候面向北方,但是现在他迷路了。虽然他手里有一张地图,但是他需要知道自己面向哪个方向,请你帮帮他。

输入描述:

每个输入包含一个测试用例。
每个测试用例的第一行包含一个正整数,表示转方向的次数N(N<=1000)
接下来的一行包含一个长度为N的字符串,由LR组成,L表示向左转,R表示向右转。

输出描述:

输出牛牛最后面向的方向,N表示北,S表示南,E表示东,W表示西。

输入例子1:

3

LRR

输出例子1:

E

 

#include
#include
using namespace std;

int main()
{
	string DREC = { 'N','E','S','W' };
	int N,i = 0,temp = 0;
	cin >> N;
	string str1;
	cin >> str1;
	while (i < N)
	{
		if (str1[i] == 'R')
			 temp += 1;
		else
			temp -= 1;
		i++;
	}
	int index = (temp % 4 + 4) % 4;
	cout << DREC[index] << endl;
	return 0;
}

2、

[编程题] 数对

时间限制:1

空间限制:32768K

牛牛以前在老师那里得到了一个正整数数对(x, y), 牛牛忘记他们具体是多少了。

但是牛牛记得老师告诉过他xy均不大于n, 并且x除以y的余数大于等于k

牛牛希望你能帮他计算一共有多少个可能的数对。

输入描述:

输入包括两个正整数n,k(1 <= n <= 10^5, 0 <= k <= n - 1)

输出描述:

对于每个测试用例, 输出一个正整数表示可能的数对数量。

输入例子1:

5 2

输出例子1:

7

例子说明1:

满足条件的数对有(2,3),(2,4),(2,5),(3,4),(3,5),(4,5),(5,3)

分析:(借鉴大佬思路)首先 ,因为x%y>=k,则y一定是要大于k的(若y小于等于k, 余数不可能大于等于k),所以y的取值应该从k+1到n;

然后看x。首先,从1到n闭区间的范围内,可以划分为若干的段,比如[1,y] [y+1,2y] [2y+1,3y]……[my+1,n]每个长度为y的段中,都有k个数([my+1,my+k))除以y的余数是小于k的,则这一段中余数大于等于k的有y-k个(注意x不能等于y,所以是y-k个,不是y-k+1个)。所以统计,一共有n/y个长度为y的段,共有n/y*(y-k)个数字满足条件;

然后考虑最后剩余的那一段,即[my+1,n],这段的长度为n%y,要判断其长度,如果大于k,则说明有满足条件的数字,要统计其个数并加上;如果小于k则说明没有把满足条件的数字包含进来。

#include

using namespace std;

int main()
{
	long n, k, temp,res = 0,a;
	cin >> n >> k;
	if (k == 0)
	{
		res = n * n;
	}
	else
	{
		for (long y = k; y <= n; y++)
		{
			temp = n / y*(y - k);
			if (n % y >= k)
			{
				a = (n % y - k + 1);
			}
			else
				a = 0;
			res = res + temp + a;
		}
	}
	cout << res << endl;
	return 0;
}

3、[编程题] 矩形重叠

时间限制:1

空间限制:32768K

平面内有n个矩形, i个矩形的左下角坐标为(x1[i], y1[i]), 右上角坐标为(x2[i], y2[i])

如果两个或者多个矩形有公共区域则认为它们是相互重叠的(不考虑边界和角落)

请你计算出平面内重叠矩形数量最多的地方,有多少个矩形相互重叠。

输入描述:

输入包括五行。
第一行包括一个整数n(2 <= n <= 50), 表示矩形的个数。
第二行包括n个整数x1[i](-10^9 <= x1[i] <= 10^9),表示左下角的横坐标。
第三行包括n个整数y1[i](-10^9 <= y1[i] <= 10^9),表示左下角的纵坐标。
第四行包括n个整数x2[i](-10^9 <= x2[i] <= 10^9),表示右上角的横坐标。
第五行包括n个整数y2[i](-10^9 <= y2[i] <= 10^9),表示右上角的纵坐标。

输出描述:

输出一个正整数, 表示最多的地方有多少个矩形相互重叠,如果矩形都不互相重叠,输出1

输入例子1:

2

0 90

0 90

100 200

100 200

输出例子1:

2

答案来自https://www.nowcoder.com/questionTerminal/a22dd98b3d224f2bb89142f8acc2fe57

import sys
lines = sys.stdin.readlines()
n = int(lines[0])
x1 = list(map(int,lines[1].split()))
y1 = list(map(int,lines[2].split()))
x2 = list(map(int,lines[3].split()))
y2 = list(map(int,lines[4].split()))
res = 1
for x in x1+x2:
    for y in y1+y2:
        cnt = 0
        for i in range(n):
            if x > x1[i] and y > y1[i] and x <= x2[i] and y <= y2[i]:
                cnt += 1
                res = max(res,cnt)
print(res)

你可能感兴趣的:(网易测试笔试)