30,336
社区成员
有一个整数 A=2021,每一次,可以将这个数加 1 、减 1 或除以 2,其中除以 2 必须在数是偶数的时候才允许。
例如,2021 经过一次操作可以变成 2020、2022。
再如,2022 经过一次操作可以变成 2021、2023 或 1011。
请问,2021 最少经过多少次操作可以变成 1。
from collections import deque
visit = [0]*10000
q = deque()
q.append(2021)
visit[2021]=1
time=0
while q :
a=len(q)
while a>0:
node = q.popleft()
if node == 1:
print(time)
exit()
if visit[node+1]==0:
visit[node+1]=1
q.append(node+1)
if visit[node-1]==0:
visit[node-1]=1
q.append(node-1)
if visit[node//2]==0 and node%2==0: # 只有偶数才可以选择除以2的操作
visit[node//2]=1
q.append(node//2)
a-=1
time += 1
n=int(input())
matrix=[[0]*n for i in range(n)]
hang=0
i=1
while hang<n:
for up in range(hang,n-1-hang):
matrix[hang][up]=i
i+=1
for right in range(hang,n-1-hang):
matrix[right][n-1-hang]=i
i+=1
for down in range(n-1-hang,hang,-1):
matrix[n-1-hang][down]=i
i+=1
for left in range(n-1-hang,hang,-1):
matrix[left][hang]=i
i+=1
hang+=1
if n%2==1:
matrix[n//2][n//2]=i
print(matrix[19][19])
问题描述
一个和尚要挑水,每次最多能挑 a 千克,水缸最多能装 t 千克,开始时水缸为空。
请问这个和尚最少要挑多少次可以将水缸装满?
输入格式
输入一行包含两个整数 a, t,用一个空格分隔。
输出格式
输出一行包含一个整数,表示答案。
样例输入
20 2021
样例输出
102
评测用例规模与约定
对于所有评测用例,1 <= a <= 100,1 <= t <= 10000。
a,t=map(int,input().split())
sum_water=0
cnt=0
while sum_water<t:
sum_water+=a
cnt+=1
print(cnt)
问题描述
在金融领域,通常将金额的百位和千位之间、十万位和百万位之间增加逗号(千分位分隔符),以方便阅读。一般从个位开始,每三位之前增加一个逗号。
例如:1234567890.00 通常写成 1,234,567,890.00。
注意小数点后固定保留 2 位。
给定一个包含千分位分隔符的数值,请读入后输出对应的不含千分位的数值,小数点仍然保留 2 位。
输入格式
输入一行包含一个由千分位分隔符的数值,恰好有 2 位小数。
输出格式
输出不含千分位分隔符的数值,保留 2 位小数。
样例输入
1,234,567,890.00
样例输出
1234567890.00
评测用例规模与约定
对于所有评测用例,给定的数值整数部分不超过12位。
lis=list(input())
for i in lis:
if i ==',':
del i
else:
print(i,end='')
问题描述
给定正整数 a, b, c,请问有多少个正整数,是其中至少两个数的约数。
输入格式
输入一行包含三个正整数 a, b, c。
输出格式
输出一行包含一个整数,表示答案。
样例输入
30 70 35
样例输出
6
样例说明
1、2、5、7、10、35满足条件。
评测用例规模与约定
对于 50% 的评测用例,1 <= a, b, c <= 1000000。
对于所有评测用例,a, b, c 不超过 10**12(10的12次方)。
import math
a,b,c = map(int,input().split())
a_lis=set()
b_lis=set()
c_lis=set()
for i in range(1,int(math.sqrt(a))+1):
if a%i==0:
a_lis.add(i)
a_lis.add(a//i)
for i in range(1,int(math.sqrt(b))+1):
if b%i==0:
b_lis.add(i)
b_lis.add(b//i)
for i in range(1,int(math.sqrt(c))+1):
if c%i==0:
if i in a_lis or i in b_lis or (i in a_lis and i in b_lis):
c_lis.add(i)
if (c//i)in a_lis or (c//i)in b_lis or ((c//i) in a_lis and (c//i) in b_lis):
c_lis.add(c//i)
print(len(c_lis))