刷题记录(240612)

xiecheng

1.给定两个正整数x和p,要求从x中提取出所有的奇数位数字组成一个新数,然后将这个新数对p取模,并输出结果。

输入描述
  • 第一行输入正整数x,代表待处理的数字。

  • 第二行输入正整数p,代表用于取模的数。

输出描述

输出一个整数,代表新数对p取模的结果。

输入

12332
12

输出

1

说明

  • 从12332中提取出奇数位数字组成新数133。

  • 133 % 12 = 1

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))
#include <iostream>
#include <vector>
using namespace std;
int main(){
    int x,p;
    cin>>x>>p;
    int a;
    vector<int> v;
    while(x){
        a = x % 10;
        if(a%2!=0){
            v.push_back(a);
        }
        x = x/10;
    }
    int m = 0;
    for(int i = v.size()-1;i>0;i--){
        m = m*10+v[i];
    }
    cout<<m%p<<endl;
}

2.给定一个正整数,要求通过重排这个整数的所有位数,使其成为一个素数。如果无解,请输出-1。否则输出任意一个合法解,代表重排后的素数。

输入描述

输入一个正整数,代表待重排的正整数。

输出描述

如果无解,请输出-1。 否则输出任意一个合法解,代表重排后的素数。

示例
示例 1

输入

310

输出

103

说明

  • 不能输出13(013),因为包含了前导零。

  • 不能输出301,因为301=7*43,不是素数。

思路:

注意0不能放首位,使用回溯算法,单独写一个函数判断是否为素数,流程图如下

from itertools import permutations
#生成所有可能的数字排列


def is_prime(n):
    if n < 2:
        return False
    i = 2
    while i <= n // i:
        if n % i == 0:
            return False
        i += 1
    return True

def solve(a):
    for perm in permutations(a):
        if perm[0] != '0':
            n = int(''.join(perm))
            if is_prime(n):
                print(n)
                return
    print(-1)

a = list(input().strip())
solve(a)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值