携程笔试 携程笔试题 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%内容,订阅专栏后可继续查看/也可单篇购买

2024 BAT笔试合集 文章被收录于专栏

持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。

全部评论
哈哈哈我以为的奇数位是第1,3,5位
3
送花
回复 分享
发布于 06-29 18:49 内蒙古
第二题有给数字范围吗。有的话可以用埃氏筛生成对应范围内的质数,然后按0-9形成状态存哈希
点赞
送花
回复 分享
发布于 06-30 01:27 辽宁
秋招专场
校招火热招聘中
官网直投

相关推荐

4 7 评论
分享
牛客网
牛客企业服务