携程笔试 携程笔试题 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位
4 回复 分享
发布于 2024-06-29 18:49 内蒙古
第二题有给数字范围吗。有的话可以用埃氏筛生成对应范围内的质数,然后按0-9形成状态存哈希
点赞 回复 分享
发布于 2024-06-30 01:27 辽宁

相关推荐

Eeeeevans:都是校友,还是同届,我就说直白点,不委婉了,我相信你应该也不是个玻璃心,首先你觉得一个双非的绩点写简历上有用吗?班长职务有用吗?ccf有用吗?企业会关心你高数满分与否吗?第二,第一个项目实在太烂,一眼就能看出是外卖,还是毫无包装的外卖,使用JWT来鉴权,把热点数据放进Redis这两个点居然还能写进简历里,说难听点这两个东西都是学个几十分钟,调用个API就能完成的事情,在双非一本的条件下,这种项目你觉得能拿出手吗,第二个项目你写的东西和你的求职方向有任何的匹配吗?第三,计设那一块毫无价值,如果想突出自己会前端,直接写入专业技能不行吗,最后,专业技能里像深入理解JVM底层原理这种你觉得这句话你自己真的能匹配吗?都是校友加上同届,我措辞直接,但希望能点出你的问题,想进大厂还得继续沉淀项目和学习
点赞 评论 收藏
分享
03-29 12:10
门头沟学院 C++
挣K存W养DOG:散漫消极者淘汰,一眼坑爹。实习几个月转正的时候说你加班太少,能力还行态度不够积极裁了,马上老实。
点赞 评论 收藏
分享
评论
5
12
分享

创作者周榜

更多
牛客网
牛客企业服务