哔哩哔哩2020秋招笔试真题
哔哩哔哩2020秋招笔试真题
1、连续整数求和
【题目描述】给定一个正整数N,试求有多少组连续正整数满足所有数字之和为N? (1<= N <= 10^9)
输入描述
5
输出描述
2
备注
解释: 5=5=2+3,共有两组连续整数([5],[2,3])求和后为5。
示例1
输入
5
输出
2
说明
5=5=2+3,共有两组连续整数([5],[2,3])求和后为5。
【解题思路】
直接枚举判断即可。
【参考代码】
#include <iostream>
using namespace std;
int consecutiveNumbersSum(int N) {
int res = 1;
int temp = 0;
for (int n = 2; n < N; n++) {
temp = temp + n - 1;
if (temp >= N) {
break;
}
if (temp % n == N % n) {
res++;
}
}
return res;
}
int main() {
int n;
cin >> n;
cout << consecutiveNumbersSum(n);
return 0;
}
2、复数乘法
【题目描述】输入两个表示复数的字符串,输出它们相乘的结果的字符串
复数字符串用a+bi表示(a,b为整数,i为虚数单位i2=1)
输入描述
两个表示复数的字符串
输出描述
两个数相乘的结果的字符串
示例1
输入
1+2i 2+1
输出
0+5i
说明
(1+2i)(2+i)=(2+i+4i+2i*i)=0+5i
示例2
输入
1+-2i 3+4i
输出
11+-2i
说明
(1+-2i)(3+4i)=(3+4i-6i-8i*i)=11+-2i
【解题思路】
模拟实现复数运算。
【参考代码】
#include <iostream>
#include <string>
using namespace std;
void par***plex(string c, int *r, int *v) {
int p = 0, l = c.length();
for (int i = 0; i < l; i++) {
if (c[i] == '+') {
p = i;
break;
}
}
*r = stoi(c.substr(0, p));
*v = stoi(c.substr(p + 1, l - 1));
}
int main() {
string a, b;
cin >> a >> b;
int r1, v1, r2, v2;
par***plex(a, &r1, &v1);
par***plex(b, &r2, &v2);
int r = r1 * r2 - v1 * v2;
int v = r1 * v2 + r2 * v1;
cout << r << "+" << v << "i";
return 0;
}
3、数组排成最小的数
【题目描述】输入一个正整数数组,将它们连接起来排成一个数,输出能排出的所有数字中最小的一个。
输入描述
一行输入,数组中的数字用逗号隔开。例如:
输入为:
32,231
则表示数组{32, 231}
输出描述
直接输出最小数字即可,如示例题目中,输出为:
23132
示例1
输入
32,231
输出
23132
【解题思路】
经典贪心。对所有字符串按照A+B<B+A的规则排序,然后按着拼接即可。
【参考代码】
#include <bits/stdc++.h>
int compare(const void *strNumber1, const void *strNumber2) {
const int MaxNumberLength = 10;
char *strCombine1 = new char[MaxNumberLength * 2 + 1];
char *strCombine2 = new char[MaxNumberLength * 2 + 1];
strcpy(strCombine1, *(const char **)strNumber1);
strcat(strCombine1, *(const char **)strNumber2);
strcpy(strCombine2, *(const char **)strNumber2);
strcat(strCo
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
<p> 本专刊由牛客官方团队打造,主要讲解名企校招技术岗位的笔试题。 内容中包含多个名企的笔试真题,附有题目思路及参考代码 本专刊购买后即可解锁所有章节,故不可以退换哦~ <


查看16道真题和解析