联通1028秋招笔试真题解析
- 2026-10-30 20:02:03
关注我们,每周更新两到三次大厂最新笔试题解析
前言
题目比较简单。 第一题打卡题,直接按题意操作即可。 第二题dp,属于dp的入门。 第三题也是比较简单的模拟题。
T1
给定一个整数数组nums和一个整数目标值target,.请在该数组中找出和为目标值target的两个整数,并返回它们在数组中的位置(按顺序为0,1,2…)。
可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。
例如整数数组nums=[3,2,4],整数目标值target=6
因为nums[1]+nums[2]=6,因此返回1,2
输入描述:
【一个整数数组】
一个整数目标值
输出描述:
和为目标值的两个整数对应数组里的位置
输入
[3,2,4]
6
输出
1,2
思路与代码:
用map存出现过的数字,每次读入一个数x,直接在map里找target-x即可。
#include <iostream>
#include <vector>
#include <unordered_map>
using namespace std;
vector<int> twoSum(vector<int>& nums, int target) {
unordered_map<int, int> numMap;
for (int i = 0; i < nums.size(); ++i) {
int complement = target - nums[i];
if (numMap.find(complement) != numMap.end()) {
return {numMap[complement], i};
}
numMap[nums[i]] = i;
}
return {};
}
int main() {
vector<int> nums;
char c;
while (cin >> c) {
if (isdigit(c) || c == '-') {
cin.putback(c);
int num;
cin >> num;
nums.push_back(num);
} else if (c == ']') {
break;
}
}
int target;
cin >> target;
vector<int> result = twoSum(nums, target);
if(result.size()!=2) cout << -1 << endl;
else cout << result[0] << "," << result[1] << endl;
return 0;
}
T2
假设你正在完成一项爬楼梯任务,需要n个步骤才能完成。每次你可以完成1个步骤,或者2个步骤并行。你有多少种不同的方法可以完成任务? 例如,你需要3个步骤完成爬楼梯任务,你可以有以下方法: 1+1+1 1+2 2+1 共3种方法。
输入描述:
所需的步骤,为一个整数。例如3
输出描述:
能有的方法,为一个整数。例如:3
输入
3
输出
3
思路与代码:
递推出一个数组即可。状态转移dp[i]=dp[i-1]+dp[i-2]
#include <iostream>
#include <vector>
using namespace std;
int solve(int n) {
if (n <= 1) {
return 1;
}
vector<int> dp(n + 1, 0);
dp[0] = 1;
dp[1] = 1;
for (int i = 2; i <= n; ++i) {
dp[i] = dp[i - 1] + dp[i - 2];
}
return dp[n];
}
int main() {
int n;
cin >> n;
int ways = solve(n);
cout << ways << endl;
return 0;
}
T3
假如一个n位自然数等于自身各个数位上数字的n次幂之和,则称此数为n位自幂数。例如: 153就是一个三位自幂数。因为153是三位数,各位数分别为: 1、5、3,且1^3 + 5^3+ 3^3 = 153 现给定一个大于等于3小于等于9的正整数n,以及正整数num,且n为num的位数,请判断该num是否为n位自幂数。如果是则输出1,否则输出-1。
输入描述:
大于等于3小于等于9的正整数n,以及正整数num
输出描述:
如果是则输出1,否则输出-1
输入样例:
3,153
输出样例:
1
输入
3,153
输出
1
思路与代码:
提取num的每一位,求n次幂看是否等于num即可。
#include <iostream>
#include <cmath>
using namespace std;
int solve(int n, int num) {
int temp = num;
int sum = 0;
while (temp > 0) {
int digit = temp % 10;
sum += pow(digit, n);
temp /= 10;
}
return (sum == num) ? 1 : -1;
}
int main() {
int n, num;
scanf("%d,%d", &n,&num);
int result = solve(n, num);
cout << result << endl;
return 0;
}
最后插一下我们的进阶一对一辅导啦
我们是一个针对技术岗(前后端开发、测试、测开、大数据开发)校招一对一进阶提高的工作室。我们从2020年2月份开始,迄今整整三年的时间,带领300+学员斩获1500+大厂offer,参加活动的同学人均5个中大厂offer以上,以下是我们活动内容的介绍! 万诺coding
我们主要是针对有一定基础的同学提供一对一笔试和面试辅导,针对每个同学不同的情况定制内容,包括但不限于“数据结构与算法”/“计算机基础知识”/“项目梳理”/“面试技巧”/“面试复盘”等内容。
摸底测试:如果有兴趣深入了解我们的活动,需要先参加我们的“摸底测试”(类似面试),方便我们了解你的具体情况(主要是code能力和计算机素养),定制出相应的辅导计划。同时这也是一个双向筛选的过程,如果基础过差的同学,抱歉我们可能无法辅导(基础过差的同学一对一辅导成本过高,对双方都不适合);摸底测试通过的同学,我们会定制化一个针对性的提高计划。然后你再考虑是否参加我们的活动。
承诺保offer:通过摸底测试后,我们会针对每个同学的情况给定一个“保offer”计划。然后同学可以根据自己的实际情况考虑参不参加我们的活动。
有兴趣的同学可以扫码添加我们的微信(whynotlab)