HJ108 求最小公倍数
题目:
正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。
输入描述:
输入两个正整数A和B。
输出描述:
输出A和B的最小公倍数。
##短除法
A,B = map(int,input().split())
T = 1
for i in range(2,min(A,B)+1):
while A % i == 0 and B % i == 0:
#T为最小公约数
T = T * i
#//向下取整
A = A//i
B = B//i
print(T*B*A)
HJ7 取近似值
写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于 0.5 ,向上取整;小于 0.5 ,则向下取整。
输入描述:
输入一个正浮点数值
输出描述:
输出该数值的近似整数值
while True:
try:
a = float(input())
if a-int(a) == 0.5:
print(int(a)+1)
else:
print(int(round(a,0)))
except:
break
HJ33 整数与IP地址间的转换
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成
一个长整数。
举例:一个ip地址为10.0.3.193
每段数字 相对应的二进制数
10 00001010
0 00000000
3 00000011
193 11000001
组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。
输入描述:
输入
1 输入IP地址
2 输入10进制型的IP地址
输出描述:
输出
1 输出转换成10进制的IP地址
2 输出转换后的IP地址
# import re
# def ten_two(s):
# e = [0,0,0,0,0,0,0,0]
# for i in range(0,8,1):
# e[i] = int(s%2)
# s=s//2
# e.reverse()
# return e
# while True:
# try:
# IP = input()
# Ten = input()
# IP_list = IP.split('.')
# Two_list = []
# for i in IP_list :
# Two_list.append(ten_two(int(i)))
# two = []
# for j in Two_list:
# two.append(str(j).replace(',','').replace('[','').replace(']',''))
# for m in range(len(two)):
# two[m] = ''.join(two[m])
# #print(two)
# all = str(two).replace('[','').replace(']','').replace(',','').replace("'",'').strip()
# #print(int(all,2))
# all_two =
# print(all_two)
# except:
# break
while True:
try:
ip = input()
num = input()
except:
break
else:
# ip to num
ip_list = ip.split('.')
ip2num = str()
for i in ip_list:
a = bin(int(i,10))[2:]
#高位补零
a = '0'*(8-len(a)) + a if len(a)<8 else a
#字符串相加不会产生一些空格
ip2num += a
#二进制转十进制
print(int(ip2num,2))
# num to ip
num2ip = []
num2 = bin(int(num,10))[2:]
#高位补零
num2 = '0'*(32-len(num2)) + num2 if len(num2)<32 else num2
for i in range(4):
#每八位取一个二进制数
b = num2[8*i:8*i+8]
b = str(int(b,2))
num2ip.append(b)
print('.'.join(num2ip))
HJ53 杨辉三角的变形
以上三角形的数阵,第一行只有一个数1,以下每行的每个数,是恰好是它上面的数、左上角数和右上角的数,3个数之和(如果不存在某个数,认为该数就是0)。
求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。例如输入3,则输出2,输入4则输出3,输入2则输出-1。
while True:
try:
#找规律
#前两行没有偶数,从第三行开始,第一个偶数出现的位置2324循环
n = int(input())
a = [2,3,2,4]
if n<=2:
print(-1)
else:
print(a[(n-3)%4])
except:
break
会超时
# //杨辉三角规律 行号 第一个偶数在该行第几个
# // 1 1 -1
# // 1 1 1 2 -1
# // 1 2 3 2 1 3 2
# // 1 3 6 7 6 3 1 4 3
# // 1 4 10 16 19 16 10 4 1 5 2
# // 1 5 15 30 45 51 45 30 15 5 1 6 4
# //
# // 首个偶数在该行第几个的规律: -1 -1 (2 3 2 4)···(2 3 2 4)
#穷举出所求行的数字,判断所求行偶数的位置
while True:
try:
n = int(input())
if n<3:
print(-1)
else:
arr = [[] for i in range(n)]
arr[0] = [1]
arr[1] = [1,1,1]
m = 2
while m < n :
column_num = 2*m + 1
for i in range(column_num):
# print(i)
# print(arr[m-1][i-2 if i-2 >=0 else 0:i+1])
arr[m].append(sum(arr[m-1][i-2 if i-2 >=0 else 0:i+1]))
m = m+1
def cal(n,arr):
for i,j in enumerate(arr[n-1]):
if j%2 == 0:
return i+1
return -1
index = cal(n,arr)
print(index)
except:
break
HJ55 挑7
输出 1到n之间 的与 7 有关数字的个数。
一个数与7有关是指这个数是 7 的倍数,或者是包含 7 的数字(如 17 ,27 ,37 ... 70 ,71 ,72 ,73...)
输入描述:
一个正整数 n 。( n 不大于 30000 )
输出描述:
一个整数,表示1到n之间的与7有关的数字个数。
while True:
try:
n = int(input())
res = []
for i in range(1,n+1):
if i%7==0 :
res.append(i)
elif '7' in str(i):
res.append(i)
print(len(list(set(res))))
except:
break
HJ56 完全数计算
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。
它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
例如:28,它有约数1、2、4、7、14、28,除去它本身28外,其余5个数相加,1+2+4+7+14=28。
输入n,请输出n以内(含n)完全数的个数。
输入描述:
输入一个数字n
输出描述:
输出不超过n的完全数的个数
要注意刷新的位置。
while True:
try:
n = int(input())
p = []
for j in range(1,n):
q = 0
for i in range(1,j):
if j%i == 0:
q += i
if q == j:
p.append(j)
print(len(p))
except:
break
这篇博客涵盖了多个算法的实现,包括求最小公倍数、浮点数取整、IP地址与整数的转换、杨辉三角的变形和寻找与7相关的数字。同时也探讨了完全数的计算,展示了如何找出一定范围内完全数的个数。文章通过代码实例展示了算法的运用和数学规律的发现。
:基础数学&spm=1001.2101.3001.5002&articleId=123312518&d=1&t=3&u=1d48ebf1cf284cbda408ca818065ec81)
70

被折叠的 条评论
为什么被折叠?



