荣耀笔试 荣耀秋招 荣耀笔试题 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等多种语言做法集合指南