携程笔试 携程笔试题 0520
笔试时间:2024年05月20日
历史笔试传送门:2023秋招笔试合集
第一题
题目
给定两个正整数x和p,要求从x中提取出所有的奇数位数字组成一个新数,然后将这个新数对p取模,并输出结果。
输入描述
第一行输入正整数x,代表待处理的数字。
第二行输入正整数p,代表用于取模的数。
输出描述
输出一个整数,代表新数对p取模的结果。
样例输入
12332
12
样例输出
1
说明:从12332中提取出奇数位数字组成新数133。133 % 12 = 1
参考题解
遍历x的每一位,提取所有奇数位数字。将提取出的奇数位数字组成一个新数。将这个新数对p取模,输出结果。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
#include <string>
int solve(long long x, int p) {
std::string s = std::to_string(x);
std::string odd;
// 提取奇数位数字组成新数
for (char c : s) {
if ((c - '0') % 2 != 0) {
odd += c;
}
}
long long new_number = odd.empty() ? 0 : std::stoll(odd);
// 计算新数对p取模的结果
int result = new_number % p;
return result;
}
int main() {
long long x;
int p;
std::cin >> x >> p;
std::cout << solve(x, p) << std::endl;
return 0;
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner;
public class Main {
public static int solve(long x, int p) {
String s = Long.toString(x);
StringBuilder odd = new StringBuilder();
// 提取奇数位数字组成新数
for (char c : s.toCharArray()) {
if ((c - '0') % 2 != 0) {
odd.append(c);
}
}
long new_number = odd.length() == 0 ? 0 : Long.parseLong(odd.toString());
// 计算新数对p取模的结果
int result = (int)(new_number % p);
return result;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long x = scanner.nextLong();
int p = scanner.nextInt();
System.out.println(solve(x, p));
scanner.close();
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
def solve(x, p):
# 提取奇数位数字组成新数
odd = [digit for digit in str(x) if int(digit) % 2 != 0]
if not odd:
new_number = 0
else:
new_number = int(''.join(odd))
# 计算新数对p取模的结果
result = new_number % p
return result
# 读取输入
x = int(input().strip())
p = int(input().strip())
# 计算并输出结果
print(solve(x, p))
第二题
题目
给定一个正整数,要求通过重排这个整数的所有位数,使其成为一个素数。如果无解,请输出-1。否则输出任意一个合法解,代表重排后的素数。
输入描述
输入一个正整数,代表待重排的正整数。
输出描述
如果无解,请输出-1。 否则输出任意一个合法解,代表重排后的素数。
样例输入
310
样例输出
103
说明:不能输出13(013),因为包含了前导零。不能输出301,因为301=7*43,不是素数。
参考题解
首先,生成所有数字的全排列。排除那些以0开头的排列。对于每个有效排列,判断其是否为素数。如果找到一个素数,输出这个素数并结束程序。如果没有找到任何素数,输出-1。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <cmath>
bool is_prime(int n) {
if (n < 2) {
return false;
}
for (int i = 2; i <= std::sqrt(n); ++i) {
if (n % i == 0) {
return false;
}
}
return true;
}
void solve(std::vector<char> a) {
std::sort(a.begin(), a.end());
do {
if (a[0] != '0')
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。


海康威视公司福利 1170人发布