2020.4.23美团点评实习生笔试题目记录(5道编程题)

幸运星

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:

在观星的时候,一种常用的方式是划出类似于正方形的区域内,确定其中所有星星的坐标。

现在我们在星空(一个无限大的二维平面)上建立坐标系。由于星星很小,我们忽略它的面积,认为每一个星星是一个点,且所有星星的坐标都是整数。

幸运星的定义是这一颗星星在这个平面内,正上,正下,正左,正右都有其他的星星(不一定相邻)。

现在,我们已经将这个正方形的区域取出,并且将他们所在的坐标给你。现在希望你能计算,这个平面内有多少颗幸运星?

输入

输入第一行包含一个数n,代表正方形区域内星星的总数。

接下来n行,每行两个整数xi,yi,代表这颗星星的坐标。

(n<=2000,-1000<=xi,yi<=1000,没有两颗星星的坐标是相同的。)

输出

输出包含一个数,即有多少颗星星是幸运星。

样例输入

8
0 0
0 1
0 2
0 3
1 1
1 2
-1 1
-1 2

样例输出

2

提示

样例解释:
有两颗幸运星,分别是(0,1)(0,2)

规范化货币

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
货币数值的规范化是金融公司的一个问题,现在你需要写一个程序来解决这一问题:

1.货币数值的整数部分要求每3位加一个英文逗号’,’(不含引号)。例如12345678应该规范化为12,345,678

2.货币数值最多只有两位小数,如果有多余的小数位数应当舍去。注意,不是四舍五入。

3.负数代表欠款,在规范化后应当在数值两端加上括号 ‘(’ 和 ‘)’ ,然后省略掉负号。

4.应当在数值前面,前括号后面(如果有括号的话)加上金钱符号’$’(不含引号)

现在给你一个数字,请你规范化这一数字

输入

输入包含多种数据,每组数据一行一个数字,可能为小数,整数,负整数,负小数或者零。

数据保证数字没有前导0,保证不会出现欠0元的情况

输出

输出规范化后的内容

样例输入

203323
0.0
0.000000
0.009212121
343444323.32432
-12344.1
-12345678.9

样例输出

$203,323.00
$0.00
$0.00
$0.00
$343,444,323.32
($12,344.10)
($12,345,678.90)

提示

范围
每个字符串长度不会超过100

轮流出局
时间限制:C/C++语言 2000MS;其他语言 4000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
现在有n名选手进行轮流报数,选手按顺序编号为1~n,另外我们会给出一个序列A,游戏会进行n轮,每轮会出局一名选手,第i轮淘汰的选手最后的排名是n-i+1,即第一轮出局的是倒数第一。出局的选手不会参与下一轮报数。

每轮游戏都是从第一个选手开始报数,即如果1号选手仍在,则从1号选手开始,否则从2号选手开始,以此类推,但是注意,每轮报数是从0开始的,第i轮时,第一个报到A[i]的选手会出局,且当前轮游戏结束。A[i]有可能大于当前的剩余人数,则最后一个人报完以后,会由第一个人接着报,直到报出A[i]。

输入

输入第一行包含一个正整数n,表示有n名选手。(1<=n<=100000)

输入第二行包含n个正整数,表示序列A。(0<=A[i]<=10^9)

输出

输出包含n行,每行一个正整数,第i行的正整数表示i号选手的排名是多少。即输出是一个1~n的排列。

样例输入

4
1 2 1 2

样例输出

1
4
2
3

提示
样例解释,

第一轮中,1-4号选手报数分别是0,1,+,+(+代表未报数),因为A[1]=1,所以2号选手出局,排名为4。
第二轮中,1-4号选手报数为0,-,1,2(-代表一出局),因为A[2]=2,所以4号选手出局,排名为3。
第三轮中,1-4号选手报数为0,-,1,-,因为A[3]=1,所以3号选手出局,排名为2。
第四轮只有1号选手了,所以他会报所有的数字,最后出局。

最优购买策略
时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
熊爷爷的超市正在打折活动当中!

目前,你和你的家里人一共k个人一起去买生活用品。由于打折活动力度很大,每个人只能去付款一次,但是这一次买的东西价格是不做限制的。

熊爷爷的超市物品分为两类:A类和B类物品,活动是如果一个人买的商品中含有A类物品,那么他买的所有物品中最便宜的一件物品半价。如果一个人买的商品中只有B类物品,那么他买的物品不打折。

你们计划要买n个物品,现在将这n个物品的信息给你,请你计算如何分配k位家人比较合算。

输入

第一行有两个整数n,k,代表物品的数量和人的数量。

接下来n行,每行两个整数u,v描述一个物品。u代表物品的价格,v代表商品的种类。如果v为1,代表其为A类商品。如果v为2,代表其为B类商品。

1<=n,k<=1000,1<=u<=1000000,v∈{1,2}

输出

输出一行一个小数,表示所需要的最少的钱数。保留两位小数输出。

样例输入

5 2
10 1
2 2
5 2
8 1
9 1

样例输出

28.00

提示
样例解释:

第一个人只买第一个物品,第二个人买剩下的物品。
第一个人由于买了A类物品,最便宜的物品半价,付款5元
第二个人由于也买了A类物品,最便宜的物品半价,付款23元(物品二半价)
(买法不唯一)

相似

时间限制:C/C++语言 1000MS;其他语言 3000MS
内存限制:C/C++语言 65536KB;其他语言 589824KB
题目描述:
两个数是相似的,当且仅当他们位与起来不为0。例如,3和5是相似的,因为3的二进制为011,5的二进制为101,他们位与起来为001不为0。

现在,给出序列a1,a2…an我们希望你找出,对于任意的i∈[1,n],是否存在j∈[1,n],使得ai,aj不相似。

输入

输入第一行包括一个整数n,代表序列a的长度

接下来一行n个数,空格隔开,代表序列a

1<=n<=100000,1<=ai<=106

输出

输出n个数。

如果对于i个数,存在j∈[1,n],使得ai,aj不相似,输出1,否则输出-1

样例输入

4
3 5 6 1

样例输出

-1 -1 1 1

提示
样例解释:

唯一一对不相似的数是6和1,故6和1的答案为1,其余为-1。

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