“Python题库:函数”的版本间的差异
第46行: | 第46行: | ||
</nowiki> | </nowiki> | ||
+ | |||
+ | ==计算ID号== | ||
+ | ===描述=== | ||
+ | |||
+ | 我的微信ID是大写字母WHUT后面的数字是两个素数连在一起,大的在前,小的在后,如果我告诉你两数的乘积是多少,你能计算出我的ID号吗? | ||
+ | |||
+ | 如果输入一个[0-9]之间的数字,你能统计出从1开始到我ID中的数字的序列里,一共出现多少次这个数字吗? | ||
+ | |||
+ | ===输入格式=== | ||
+ | |||
+ | 第一行输入ID中两个素数的乘积 | ||
+ | |||
+ | 第二行输入一个[0-9]之间的数字 | ||
+ | |||
+ | ===输出格式=== | ||
+ | |||
+ | 第一行输出ID号 | ||
+ | |||
+ | 第二行输出数字的次数 | ||
+ | |||
+ | ===输入输出示例=== | ||
+ | |||
+ | <nowiki> | ||
+ | 输入 输出 | ||
+ | 示例 1 196409 | ||
+ | 3 WHUT997197 | ||
+ | 599140</nowiki> | ||
+ | |||
+ | ===代码=== | ||
+ | <nowiki> | ||
+ | def isPrime(n): # 判断参数 n 是否为素数的函数 | ||
+ | if n < 2: # 小于2的数字都不是素数 | ||
+ | return False | ||
+ | for i in range(2, int(n ** 0.5) + 1): # 根据素数定义判定是否是素数,是素数返回1 | ||
+ | if n % i == 0: # 从 2到n-1中如果存在一个数是i,使n 可以整除i,则n不是素数 | ||
+ | return False | ||
+ | else: # 若for循环未遇到return正常结束,则n是素数 | ||
+ | return True | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | def checkId(n): | ||
+ | if n % 2 == 0 and isPrime(n // 2): # 如果n能被2整除,单独处理,提高效率 | ||
+ | return int(str(n // 2) + str(2)) | ||
+ | else: | ||
+ | for num in range(3,n//2+1,2): # 如果n不能被2整除,则两个素数不包括2,都是奇数 | ||
+ | if isPrime(num) and n % num == 0 and isPrime(n // num): # isPrime(n // num)放在最后,利用短路效应,可以使大数的素数判定次数最少 | ||
+ | return int(str(n // num) + str(num)) # 返回值转字符串拼接后再转整数 | ||
+ | |||
+ | def countnumber(n,num): | ||
+ | m, countnum = 1, 0 | ||
+ | while n//m > 0: | ||
+ | high, mod = divmod(n, m*10) | ||
+ | curNum, low = divmod(mod, m) | ||
+ | if curNum > num: | ||
+ | countnum += high*m + m | ||
+ | elif curNum == num: | ||
+ | countnum += high*m + low + 1 | ||
+ | else: | ||
+ | countnum+= high*m | ||
+ | m = m*10 | ||
+ | return countnum | ||
+ | |||
+ | |||
+ | if __name__ == '__main__': | ||
+ | n = int(input()) # 输入ID,整数,保证是两个素数的积 | ||
+ | number = int(input()) # 输入0-9之间的一个数字 | ||
+ | ID = checkId(n) | ||
+ | countNumber = countnumber(ID,number) # 统计 number的个数 | ||
+ | print('WHUT' + str(ID)) | ||
+ | print(countNumber)</nowiki> |
2021年11月12日 (五) 07:33的版本
目录
二分法求平方根B
描述
设计一个用二分法计算一个大于或等于 0 的实数 n 的平方根的函数sqrt_binary(n),实数 n和计算精度控制由用户在同一行内输入,用逗号进行分隔,输出结果保留8位小数。当(abs(x * x - n) )小于或等于设定的精度时,近似认为 x * x == n。
注:初始区间取[0,n+0.25]
输入格式
在同 行内输入一个实数 n(大于或等于0)和一个代表精度的数字(可用1e-m格式输入),逗号间隔
输出格式
第一行输出用自己设计的函数计算得到的平方根
第二行输出用math库开平方函数计算得到的平方根
输入输出示例
输入 输出
示例 1 5.0,1e-7
代码
import math def sqrt_binary(num, accuracy): """接收一个浮点数num和一个表示计算精度的浮点数accuracy为参数,用二分法计算浮点数的平方根x, 当 abs(x * x - num) <= accuracy时认为达到计算精度,以浮点数类型返回计算得到的平方根。""" low, high = 0, num + 0.25 # 设定初始区间 while True: # 构建无限循环 x = (high + low) / 2 # 假设平方根落在区间的二分之一处,即中点 if abs(x * x - num) <= accuracy: # 当误差小于计算精度时,终止循环 return x # 返回当前的x值为平方根 elif x * x - num < 0: # 当前x的平方小于num时,平方根应该位于右侧区间 low = x # 以当前数值为区间下限,缩小区间为原来的一半 else: # 当前x的平方大于num时,平方根应该位于左侧区间 high = x # 以当前数值为区间上限,缩小区间为原来的一半 n, error = map(float, input().split(',')) # 输入浮点数 n 和计算精度 print('{:.8f}'.format(sqrt_binary(n, error))) # 调用二分法函数计算平方根 print('{:.8f}'.format(math.sqrt(n))) # 用math库中的sqrt()计算平方根
计算ID号
描述
我的微信ID是大写字母WHUT后面的数字是两个素数连在一起,大的在前,小的在后,如果我告诉你两数的乘积是多少,你能计算出我的ID号吗?
如果输入一个[0-9]之间的数字,你能统计出从1开始到我ID中的数字的序列里,一共出现多少次这个数字吗?
输入格式
第一行输入ID中两个素数的乘积
第二行输入一个[0-9]之间的数字
输出格式
第一行输出ID号
第二行输出数字的次数
输入输出示例
输入 输出 示例 1 196409 3 WHUT997197 599140
代码
def isPrime(n): # 判断参数 n 是否为素数的函数 if n < 2: # 小于2的数字都不是素数 return False for i in range(2, int(n ** 0.5) + 1): # 根据素数定义判定是否是素数,是素数返回1 if n % i == 0: # 从 2到n-1中如果存在一个数是i,使n 可以整除i,则n不是素数 return False else: # 若for循环未遇到return正常结束,则n是素数 return True def checkId(n): if n % 2 == 0 and isPrime(n // 2): # 如果n能被2整除,单独处理,提高效率 return int(str(n // 2) + str(2)) else: for num in range(3,n//2+1,2): # 如果n不能被2整除,则两个素数不包括2,都是奇数 if isPrime(num) and n % num == 0 and isPrime(n // num): # isPrime(n // num)放在最后,利用短路效应,可以使大数的素数判定次数最少 return int(str(n // num) + str(num)) # 返回值转字符串拼接后再转整数 def countnumber(n,num): m, countnum = 1, 0 while n//m > 0: high, mod = divmod(n, m*10) curNum, low = divmod(mod, m) if curNum > num: countnum += high*m + m elif curNum == num: countnum += high*m + low + 1 else: countnum+= high*m m = m*10 return countnum if __name__ == '__main__': n = int(input()) # 输入ID,整数,保证是两个素数的积 number = int(input()) # 输入0-9之间的一个数字 ID = checkId(n) countNumber = countnumber(ID,number) # 统计 number的个数 print('WHUT' + str(ID)) print(countNumber)