Python蓝桥31天,第二天

1. 排他平方数

题目描述

在这里插入图片描述

解析:

用python的内置函数就能解决
主要是两个要求

  1. 六位整数
  2. 平方后的数的各个数字和原数按位数取交集为空集

代码

for i in range(203880,1000000):
    if len(list(set(str(i)))) == 6:
        if not set(str(i)).intersection(set(str(i * i))):
            print(i)

2. 买不到的数目

题目描述

在这里插入图片描述

解析

主要的步骤有两个

  1. 确定取值范围
  2. 求出最大的组合数字
    Ⅰ:先求所有的满足要求的数字
    这个原因我还没弄懂,如果有大佬希望给予指点
    Ⅱ:取最大值
    我的思路
    我们先列一个方程式(以题目案例为例):4x+7y = num
    PS:x和y表示有多少包,是整数,num表示能满足的数字
    现在我们转换一下得到:x = (num-7y)/4
    这里x要求正整数或者0
    所以num-7y>=0 and (num-7y)%4 == 0
    可能你想问,y怎么取值?这里的y其实和num-7y联动,从0开始不断增加,也就是说num要一遍又一遍的以7为步长缩减
    反向思考,如果上面的要求满足不了,比如在num>0的时候,(num-7y)%4 !=0

代码

def gcb(a,b):
    if a % b ==0:
        return b
    else:
        return gcb(b,a%b)

lis = []
n, m = map(int, input().split(" "))
for num in range(1, int((n*m)/gcb(n,m)) + 1): # 取值范围是1到最小公倍数
    temp = num # temp代替num
    flag = False # 如果能表示temp为False,不能表示为True
    while temp >= 0: # 初始时temp - 7y时,y==0
        if temp % n != 0: # (temp-7y)%4
            flag = True # 如果满足!=0只是说明它存在可能性
        else:
            flag = False # 一旦不满足就不搞这个数了
            break
        temp -= m # (temp - 7y)
    if flag:
        lis.append(num)
print(max(lis))

2. 回文日期

题目描述

在这里插入图片描述

解析

两步:
一个是回文判断,一个是ababbaba模式的判断
ababbaba其实也是回文
思路
我对时间类的问题很没辙啊,其实就是对python的datatime内置函数不是很熟悉,思路也是大众想法
因为有的数字没有实际日期,所以就在实际日期里遍历,比如23233232就不是实际日期,但是如果用日期函数每天加1,一定不会出现不符合时间格式的日期。
所以全都转成日期格式,然后datetime.timedelta(days=1)一天天加

代码

# @Time : 2022/3/9 16:12
# @Author: Sanmu
# @File:九_回文日期.py
# @Sotware: PyCharm
import datetime

date = input()
y = int(date[0:4])
m = int(date[4:6])
d = int(date[6:])
date = datetime.date(y, m, d)
count = []
while len(count) < 2:
    date = date + datetime.timedelta(days=1)
    date_str = str(date).replace('-','')
    if date_str == date_str[::-1] and len(count) < 1:
        count.append(date_str)
    if (date_str[0] == date_str[2] == date_str[5] == date_str[7]) and (
            date_str[1] == date_str[3] == date_str[4] == date_str[6]):
        count.append(date_str)

for da in count:
    print(da)

4. 约瑟夫

题目描述

在这里插入图片描述

代码

PS:方法一超时,用的传统的循环链表,方法二其实我还没搞懂,只知道这么写┭┮﹏┭┮

# @Time : 2022/3/9 17:18
# @Author: Sanmu
# @File:九_约瑟夫环.py
# @Sotware: PyCharm

"""
class Man:
    def __init__(self, value, next=None):
        self.value = value
        self.next = next


def creatlist(n):
    root = Man(1)
    temp = root
    for i in range(2, n + 1):
        temp.next = Man(i)
        temp = temp.next
    temp.next = root
    return root


def move(root):
    temp = root
    while temp.next != root:
        temp = temp.next
    return temp



n, k = map(int, input().split(" "))
root = creatlist(n)
temp = move(root)
while temp.next != temp:
    for i in range(k-1):
        temp = temp.next
    temp.next = temp.next.next
print(temp.value)"""

n,k = map(int,input().split())
num = 0
for i in range(2,n+1):
    num = (num+k)%i
print(num + 1)
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值