哔哩哔哩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> 本专刊由牛客官方团队打造,主要讲解名企校招技术岗位的笔试题。 内容中包含多个名企的笔试真题,附有题目思路及参考代码 本专刊购买后即可解锁所有章节,故不可以退换哦~ <