python_study--week3
1.求特殊自然数
题目描述
一个十进制自然数,它的七进制与九进制表示都是三位数,且七进制与九进制的三位数码表示顺序正好相反。编程求此自然数,并输出显示。
输入格式
三行: 第一行是此自然数的十进制表示; 第二行是此自然数的七进制表示; 第三行是此自然数的九进制表示。
输出格式
无
样例输入
无
样例输出
无
程序代码
for a in range(1,7):for c in range(1,7):b = 24*a-40*cif 0<=b<=6:decimal = 49*a + 7*b +cbase7 = f"{a}{b}{c}"base9 = f"{c}{b}{a}"print(decimal)print(base7)print(base9)exit()设七进制数为abc(a不为零,因为a在百位上),九进制数为cba(同理c也不为零),所以a和c的取值范围为从1--6,因为abc都是七进制数,七进制数逢7进1,所以a,b,c都不能超过7,b的取值范围为0--6(b在中间,可以为零)。由题意可得七进制与九进制的三位数码表示顺序正好相反,则可以列出等式49a + 7b + c = 81c + 9b + a,进一步简化为24a - b - 40c = 0,即b = 24a - 40c。
打印结果后,用 exit() 终止程序(因为题目中这样的数唯一,无需继续循环)
2.统计满足条件的4位数个数
题目描述
给定若干个四位数,求出其中满足以下条件的数的个数: 个位数上的数字减去千位数上的数字,再减去百位数上的数字, 再减去十位数上的数字的结果大于零。
输入格式
输入为两行,第一行为四位数的个数n,第二行为n个的四位数,数与数之间以一个空格分开。(n <= 100)
输出格式
输出为一行,包含一个整数,表示满足条件的四位数的个数。
样例输入
5 1234 1349 6119 2123 5017
样例输出
3
程序代码
n = int(input()) number = list(map(int,input().split())) count = 0 for num in number:a = num // 1000 #千位b = (num // 100) % 10 #百位c = (num // 10) % 10 #十位d = num % 10 #个位if d-a-b-c > 0:count+=1 print(count)
3.级数求和
题目描述
已知:Sn= 1+1/2+1/3+…+1/n。显然对于任意一个整数K,当n足够大的时候,Sn大于K。
现给出一个整数K(1<=k<=15),要求计算出一个最小的n;使得Sn>K。
输入格式
一个整数K。
输出格式
一个整数n。
样例输入
1
样例输出
2
程序代码
k = int(input()) sum = 0.0 n = 0 while sum <= k:n += 1sum += 1/n print(n)
4.分离整数的各个数位
题目描述
给定一个整数,要求从个位开始分离出它的每一位数字。
输入格式
输入一个整数,整数在1到100000000之间。
输出格式
从个位开始按照从低位到高位的顺序依次输出每一位数字。数字之间以一个空格分开。
样例输入
123
样例输出
3 2 1
程序代码
n = int(input())
digits = [] #定义了一个列表
while n >0 :digit = n % 10 #取个位数digits.append(str(digit)) #将每次取到的个位数加到列表中n = n // 10
print(' '.join(digits))str() 是 Python 的类型转换函数,用于将整数 digit 转换为字符串类型。
这里转换为字符串的目的是为了后续使用 ' '.join(digits) 拼接时,能直接按字符串格式处理(join() 方法要求列表元素是字符串类型)。
5.数字反转
题目描述
给定一个整数,请将该数各个位上数字反转得到一个新数。新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零(参见样例2)。
输入格式
输入共 1 行,一个整数N。 -1,000,000,000 ≤ N≤ 1,000,000,000。
输出格式
输出共 1 行,一个整数,表示反转后的新数。
样例输入
123
样例输出
321
程序代码
N = int(input()) if N < 0:numbers = -int(str(-N) [::-1]) else:numbers = int(str(N)[::-1]) print(numbers)
用到了字符串切片操作

6.开关灯
题目描述
假设有N盏灯(N为不大于5000的正整数),从1到N按顺序依次编号,初始时全部处于开启状态;有M个人(M为不大于N的正整数)也从1到M依次编号。
第一个人(1号)将灯全部关闭,第二个人(2号)将编号为2的倍数的灯打开,第三个人(3号)将编号为3的倍数的灯做相反处理(即,将打开的灯关闭,将关闭的灯打开)。依照编号递增顺序,以后的人都和3号一样,将凡是自己编号倍数的灯做相反处理。
请问:当第M个人操作之后,哪几盏灯是关闭的,按从小到大输出其编号,其间用逗号间隔。
输入格式
输入正整数N和M,以单个空格隔开。
输出格式
顺次输出关闭的灯的编号,其间用逗号间隔。
样例输入
10 10
样例输出
1,4,9
程序代码
N,M = map(int,input().split())
'''
初始时所有的灯都处于开启状态
创建了一个lights列表用来存储灯的状态,用True表示开,False表示关。下标从1开始对应,0不用,所以是到N+1
'''
lights = [True] * (N+1)
#第一个人将灯全部关闭
for i in range(1,N+1):lights[i]=False
#从第二个人开始,此后的人都对自己编号倍数的灯做相反处理
for person in range(2,M+1):for lamp in range(person,N+1,person): #操作所以编号为当前人员编号倍数的灯lights[lamp] = not lights[lamp] #状态反转
closed = [str(i) for i in range(1,N+1) if not lights[i]]
print(','.join(closed))range的格式是:range(起始值, 结束值, 步长)
7.求分数序列和
题目描述
有一个分数序列 q1/p1,q2/p2,q3/p3,q4/p4,q5/p5,.... ,其中qi+1= qi+ pi, pi+1=qi, p1= 1, q1= 2。比如这个序列前6项分别是2/1,3/2,5/3,8/5,13/8,21/13。求这个分数序列的前n项之和。
输入格式
输入有一行,包含一个正整数n(n <= 30)。
输出格式
输出有一行,包含一个浮点数,表示分数序列前n项的和,精确到小数点后4位。
样例输入
2
样例输出
3.5000
程序代码
n = int(input())
total = 0.0
q, p = 2, 1
for _ in range(n):total += q/pold_q = qq = q +pp = old_q
print("{0:.4f}".format(total))8.计算分数加减表达式的值
题目描述
编写程序,输入n的值,求 1/1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 + 1/7 - 1/8 + ... + (-1)n-1·1/n 的值。
输入格式
输入一个正整数n。1 <= n <= 1000。
输出格式
输出一个实数,为表达式的值,保留到小数点后四位。
样例输入
2
样例输出
0.5000
程序代码
n = int(input())
total = 0.0
for i in range(1,n+1):total += ((-1)**(i-1))*(1/i)
print("{0:.4f}".format(total))9.[编程入门]阶乘求和
题目描述
求Sn=1!+2!+3!+4!+5!+…+n!之值,其中n是一个数字(n不超过20)。
输入格式
n
输出格式
Sn的值
样例输入
5
样例输出
153
程序代码
n = int(input()) sn = 0 factorial = 1 for i in range(1,n+1):factorial *= isn += factorial print(sn)
10.求出e的值
题目描述
利用公式e = 1 + 1/1! + 1/2! + 1/3! + ... + 1/n! 求e 。
输入格式
输入只有一行,该行包含一个整数n(2<=n<=15),表示计算e时累加到1/n!。
输出格式
输出只有一行,该行包含计算出来的e的值,要求打印小数点后10位。
样例输入
10
样例输出
2.7182818011
程序代码
n = int(input())
total = 1.0
factorial = 1
for i in range(1,n+1):factorial *=itotal += 1/factorial
print("{0:.10f}".format(total))11.计算多项式的值
题目描述
假定多项式的形式为xn+xn-1+…+x2+x+1,请计算给定单精度浮点数x和正整数n值的情况下这个多项式的值。
输入格式
输入仅一行,包括x和n,用单个空格隔开。x在float范围内,n <= 1000000。
输出格式
输出一个实数,即多项式的值,精确到小数点后两位。保证最终结果在float范围内。
样例输入
2.0 4
样例输出
31.00
程序代码
x,n = input().split()
x = float(x)
n = int(n)
if x==1.0:total = n+1.0
else:total = 1.0term = 1.0for _ in range(n):term *= xtotal +=term
print("{0:.2f}".format(total))12.数1的个数
题目描述
给定一个十进制正整数n,写下从1到n的所有整数,然后数一下其中出现的数字“1”的个数。
例如当n=2时,写下1,2。这样只出现了1个“1”;当n=12时,写下1,2,3,4,5,6,7,8,9,10,11,12。这样出现了5个“1”。
输入格式
正整数n。1 <= n <= 10000。
输出格式
一个正整数,即“1”的个数。
样例输入
12
样例输出
5
程序代码
n = int(input())
total = 0
for i in range(1,n+1):total += str(i).count('1') #count统计字符串中 '1' 出现的次数
print(total)13.与7无关的数
题目描述
一个正整数,如果它能被7整除,或者它的十进制表示法中某一位上的数字为7,则称其为与7相关的数。现求所有小于等于n(n < 100)的与7无关的正整数的平方和。
输入格式
输入为一行,正整数n(n < 100)。
输出格式
输出一行,包含一个整数,即小于等于n的所有与7无关的正整数的平方和。
样例输入
21
样例输出
2336
程序代码
n = int(input()) total = 0 for i in range(1,n+1):if i % 7 !=0 and i % 10 != 7 and i // 10 != 7:total += i**2 print(total)
小结:这周刷的题有些有点难度(对现阶段的我而言)就有点耐不住性子看不下去,心静不下来有些浮躁,然后这周刷的题也不多,周五周六周日玩爽了【gs】怪我太会奖励自己了。下周开始我一定在状态(zuihaoshi)。然后下周要学点java的语法,嗯对。
