网易2020秋招笔试真题
网易2020秋招笔试真题
1、最小数位和
【题目描述】定义S(n),表示n在十进制下的各位数字和。
现在给定一个x,请你求出最小正整数n,满足x≤S(n).
输入描述
第一行数据组数T,对于每组数据,一行一个数字x。
1≤x≤105,1≤T≤10
输出描述
对于每组数据,一行一个整数表示最小的n。
示例1
输入
2 7 9
输出
7 9
示例2
输入
2 13 18
输出
49 99
【解题思路】
构造题。10进制最大数是9,所以求9的除数就有几个9,余数就是最大位的数。
【参考代码】
#include <bits/stdc++.h>
using namespace std;
int t;
void solve() {
int x;
scanf("%d", &x);
if (x % 9)
printf("%d", x % 9);
x -= x % 9;
for (int i = 1; i <= x / 9; i++)
printf("9");
printf("\n");
}
int main() {
scanf("%d", &t);
while (t--)
solve();
return 0;
}
2、吃葡萄
【题目描述】有三种葡萄,每种分别有a,b,c颗。有三个人,第一个人只吃第1,2种葡萄,第二个人只吃第2,3种葡萄,第三个人只吃第1,3种葡萄。
适当安排三个人使得吃完所有的葡萄,并且且三个人中吃的最多的那个人吃得尽量少。
输入描述
第一行数字T,表示数据组数。
接下来T行,每行三个数a,b,c
1≤a,b,c≤1018,1≤T≤10
输出描述
对于每组数据,输出一行一个数字表示三个人中吃的最多的那个人吃的数量。
示例1
输入
2 1 2 3 1 2 6
输出
2 3
示例2
输入
1 12 13 11
输出
12
【解题思路】
可以看成是三个人分别站在三角形的顶点(假定可以形成三角形)。设三角形两个短边是a,b,长边是c。则,若两短边之和大于等于长边的一半,可实现总数平分;反之,则结果为长边的一半。
【参考代码】
#include <bits/stdc++.h>
using namespace std;
#define ll long long
ll up(ll a, ll b) {
if (a % b)
return a / b + 1;
return a / b;
}
int main() {
int t;
scanf("%d", &t);
while (t--) {
ll a, b, c;
cin >> a >> b >> c;
ll mx = max(max(a, b), c);
ll ans = max(up(mx, 2), up(a + b + c, 3));
cout << ans << endl;
}
return 0;
}
3、圆环切割
【题目描述】小易有n个数字排成一个环,你能否将它们分成连续的两个部分(即在环上必须连续),使得两部分的和相等?
输入描述
第一行数据组数T,对于每组数据
第一行数字n,表示数字个数
接下来一行n个数,按顺序给出环上的数字。
2≤n≤100000,1≤Ai≤109
输出描述
对于每组数据,一行输出YES/NO
示例1
输入
1 6 1 2 3 4 5 6
输出
NO
示例2
输入
1 4 4 4 5 3
输出
YES
【解题思路】
维护出前缀和数组,然后通过set容器做一个hash查找看是否能完成切割。
【参考代码】
#include <bits/stdc++.h>
using namespace std;
int n;
#define ll long long
ll sum[100005];
set<ll> st;
void solve() {
scanf("%d", &n);
memset(sum, 0, sizeof(sum));
st.clear();
for (int i = 1; i <= n; i++) {
int x;
scanf("%d", &x);
sum[i] = sum[i - 1] + x;
}
if (sum[n] & 1) {
puts("NO");
return;
}
for (in
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
<p> 本专刊由牛客官方团队打造,主要讲解名企校招技术岗位的笔试题。 内容中包含多个名企的笔试真题,附有题目思路及参考代码 本专刊购买后即可解锁所有章节,故不可以退换哦~ <
查看9道真题和解析