荣耀笔试 荣耀秋招 荣耀笔试题 0927
笔试时间:2025年9月27日
往年笔试合集:
第一题:求余数
输入正整数n和m,分别将二者的各个数位的数字相加得到x和y,求x除以y的余数。比如输入为123和11,则位数相加分别为(1 + 2 + 3 = 6)和(1 + 1 = 2),则余数为(6 % 2 = 0)。
输入描述
输入共一行,第一个为整数n,第二个为整数m,范围都为1-2147483647。
输出描述
输出求余数的结果,共一行(包含换行)。
样例输入
123 11
样例输出
0
样例说明
(1+2+3) % (1+1)等于0
参考题解
解题思路:
- 数位和计算:用循环取出一个数的最后一位(x % 10),将这个数字加到总和中,去掉最后一位(x /= 10),重复直到数字变为0
- 取余运算:计算出n的数位和x,计算出m的数位和y,输出x % y(x除以y的余数)
C++:
#include <iostream>
using namespace std;
int sumOfDigits(int number) {
int total = 0;
while (number > 0) {
total += number % 10;
number /= 10;
}
return total;
}
int main() {
int firstNum, secondNum;
cin >> firstNum >> secondNum;
int sumFirst = sumOfDigits(firstNum);
int sumSecond = sumOfDigits(secondNum);
cout << sumFirst % sumSecond << endl;
return 0;
}
Java:
import java.util.Scanner;
public class Main {
private static int sumOfDigits(int number) {
int total = 0;
while (number > 0) {
total += number % 10;
number /= 10;
}
return total;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int firstNum = scanner.nextInt();
int secondNum = scanner.nextInt();
int sumFirst = sumOfDigits(firstNum);
int sumSecond = sumOfDigits(secondNum);
System.out.println(sumFirst % sumSecond);
}
}
Python:
def sum_of_digits(number):
total = 0
while number > 0:
total += number % 10
number //= 10
return total
first_num, second_num = map(int, input().split())
sum_first = sum_of_digits(first_num)
sum_second = sum_of_digits(second_num)
print(sum_first % sum_second)
第二题:数组搜索
给定一个一维整数数组A和一个目标值t,设计算法,在A中找出差为目标值的那两个整数的一对下标,需要找出所有满足条件的下标组合。
输入描述
第一个输入为整数数组A,以空格分隔,第二个输入为目标差值t。
输出描述
所有满足条件的下标的数组,注意输出严格按照示例中的格式。
样例输入
2 11 14 14 17
3
样例输出
[(1, 2), (1, 3), (2, 4), (3, 4)]
参考题解
解题思路:
- 读取输入:第一行数组元素(空格分隔),第二行目标差值diff
- 预处理:建立值→索引列表的映射,使用HashMap<Integer, List<Integer>>存储每个数字对应的所有出现位置
- 查找符合条件的下标对:遍历数组中的每个元素numbers[i],计算两个目标值plusTarget = numbers[i] + diff和minusTarget = numbers[i] - diff,在映射中查找这两个目标值
- 输出结果:将所有符合条件的下标对格式化为(i, j)并输出
C++:
#include <iostream>
#include <vector>
#include <unordered_map>
#include <string>
#include <sstream>
using namespace std;
int main() {
string line;
getline(cin, line);
stringstream ss(line);
vector<int> numbers;
int num;
while (ss >> num) {
numbers.push_back(num);
}
int diff;
cin >> diff;
unordered_map<int, vector<int>> indexMap;
for (int i = 0; i < numbers.size(); i++) {
indexMap[numbers[i]].push_back(i);
}
vector<string> pairs;
for (int i = 0; i < numbers.size(); i++) {
int plusTarget = numbers[i] + diff;
int minusTarget = numbers[i] - diff;
if (indexMap.count(plusTarget)) {
for (int j : indexMap[plusTarget]) {
if (i < j) {
pairs.push_back("(" + to_string(i) + ", " + to_string(j) + ")");
}
}
}
if (indexMap.count(minusTarget)) {
for (int j : indexMap[minusTarget]) {
if (i < j) {
pairs.push_back("(" + to_string(i) + ", " + to_string(j) + ")");
}
}
}
}
cout << "[";
for (int i = 0; i < pairs.size(); i++) {
cout << pairs[i];
if (i < pairs.size() - 1) cout << ", ";
}
cout << "]" << endl;
return 0;
}
Java:
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String[] tokens = scanner.nextLine().trim().split("\\s+");
int length = tokens.length;
int[] numbers = new int[length];
for (int i = 0; i < length; i++) {
numbers[i] = Integer.parseInt(tokens[i]);
}
int diff = Integer.parseInt(scanner.nextLine().trim());
Map<Integer, List<Integer>> indexMap = new HashMap<>();
for (int i = 0; i < length; i++) {
indexMap.computeIfAbsent(numbers[i], k -> new ArrayList<>()).add(i);
}
List<String> pairs = new ArrayList<>();
for (int i = 0; i < length; i++) {
int plusTarget = numbers[i] + diff;
int minusTarget
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
2025 春招笔试合集 文章被收录于专栏
2025打怪升级记录,大厂笔试合集 C++, Java, Python等多种语言做法集合指南
