31,
*
* *
* *
* *
*
用户输入菱形高度 n ,并打印出该高度下的菱形
输入输出描述
输入高度 n , n 为奇数
输出该高度的菱形
n = eval(input())
for i in range(1, n + 1):
for k in range(abs(n // 2 + 1 - i)):
print(" ", end = "")
for j in range(1, i + 1):
if j <= i and i + j <= n + 1:
if j == 1 or j == i or j + i == n + 1:
print("*", end = " ")
else:
print(" ", end = " ")
print()
32,
*
* * *
* * * * *
* * *
*
用户输入菱形高度 n ,并打印出该高度下的菱形
输入输出描述
输入高度 n , n 为奇数
输出该高度的菱形
x = eval(input())
a = x // 2
b = x // 2 + 1
for n in range(-a, b):
for k in range(abs(n)):
print(" " , end = " ")
for i in range(1):
num = x - 2 * abs(n)
print("* "*num, end = " ")
print()
33.
计算机随机生成一个 [0,100] 之间的整数,程序提示用户连续地输入数字直到它与那个随机生成的数字相
同
对于用户输入的数字,程序会提示它是过高还是过低
输入输出描述
每次输入一个整数
每次输出该数字是过高还是过低,如果猜中则输出猜中的数字并结束
import random
randNum = random.randint(0, 100) #随机生成一个数
while True:
usrNum = eval(input())
if usrNum < randNum:
print("小了")
elif usrNum > randNum:
print("大了")
else:
print("猜对了")
break
34.
输入两个正整数,计算其最大公约数,例如 4 和 2 的最大公约数是 2 , 16 和 24 的最大公约数是 8
输入输出描述
输入两个数字
输出最大公约数
num1, num2 = eval(input())
min_num = min(num1, num2)
for num in range(min_num, 0, -1):
if num1 % num == 0 and num2 % num == 0:
print(num)
break
35.
题目描述
一个大于 1 的整数如果只能被正整数 1 和它本身整除,则它就是素数,例如 2 、 3 、 5 和 7 都是素数,而 4 、
6 、 8 、 9 则不是
输入输出描述
输入一个大于 1 的正整数
输出 Yes 表示该数字是素数,否则输出 No
num = eval(input())
#哨兵:监控状态变化
flag = True #默认是素数
for n in range(2, num // 2 + 1):
if num % n == 0:
flag = False
break
if flag:
print("Yes")
else:
print("No")
36.
输入两个正整数,计算其最小公倍数,例如 4 和 2 的最小公倍数是 4 , 3 和 5 的最小公倍数是 15
输入输出描述
输入两个正整数
输出最小公倍数
a, b = eval(input())
minNum = min(a, b)
maxNum = max(a, b)
#找最大公约数
for i in range(minNum, 0, -1):
if minNum % i == 0 and maxNum % i == 0 :
if i == minNum:
print(maxNum)
break
elif 1 < i < minNum:
n = (maxNum // i) * minNum
print(n)
break
else:
print(a * b)
37.
输入一个正整数,然后找出它所有的最小因子,也称之为素因子
输入输出描述
输入一个正整数
输出多行,每行输出一个素因子
n = eval(input())
i = 2
while n != 1:
if n % i == 0:
print(i ,end = " ")
n = n // i
else:
i += 1
38.
如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数
例如 6 = 3 + 2 + 1 , 28 = 14 + 7 + 4 + 2 + 1
输入输出描述
输入一个正整数
输出该数是否为完全数
num = eval(input())
sum = 0
for i in range(1, num // 2 + 1):
if num % i == 0:
sum = sum + i
if num == sum:
print("Yes")
else:
print("No")
39.打印前50个素数,每打印10个素数换行
num = 2
count = 0
while count != 50:
flag = True
for n in range(2, num // 2 + 1):
if num % n == 0:
flag = False
break
#是素数怎么去处理
if flag:
print(num, end = "\t")
count += 1
if count % 10 == 0:
print()
num += 1
40.
n = eval(input())
sum = 0
for i in range(1, n + 1):
a = ((-1) ** (i + 1)) / (2 * i - 1)
sum = sum + a
pi = 4 * sum
print(pi)
41.
n = eval(input())
num = 1
sum = 0
for i in range(1, n + 1):
num = num * i
sum = sum + 1 / num
Nsum = 1 + sum
print(Nsum)
42.
import random
computer_choice = random.randint(0, 2)
user = 0
com = 0
flag = True
while flag:
user_choice = int(input())
if user_choice == computer_choice:
pass
elif (user_choice == 0 and computer_choice == 2) or (user_choice == 1 and computer_choice == 0) or (user_choice == 2 and computer_choice == 1):
user = user + 1
else:
com = com + 1
if user == 3:
flag = False
print("用户赢")
elif com == 3:
flag = False
print("计算机赢")
43.
在数字范围 [1,7] 之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数
count = 0
for i in range(1, 8):
for j in range(i+1, 8):
count += 1
print( i, j, sep = "," )
print(count)
44.有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?
nums = [1, 2, 3, 4]
count = 0
for i in nums:
for j in nums:
if i == j:
continue
for k in nums:
if i == k or j == k:
continue
print(i * 100 + j * 10 + k)
count += 1
print(count)
45.编写程序,输出所有的水仙花数
for i in range(100, 1000):
bai = i // 100
shi = i // 10 % 10
ge = i % 10
if bai ** 3 + shi ** 3 + ge ** 3 == i:
print(i)
46.
一只青蛙,一次可以跳一个台阶或者两个台阶,现有 n 个台阶,问该青蛙有多少种不同的跳法?
例如:两个台阶,有两种跳法( 1+1 , 2 );四个台阶,有五种跳法( 1+1+1+1 , 2+1+1 , 1+2+1 ,1+1+2 , 2+2 )
n = eval(input())
a = 1
b = 2
sum = 0
if n <= 2:
print(n)
else:
for i in range(3, n+1):
sum = a + b
a = b
b = sum
print(sum)
47.
现有堆叠相加模式a+aa+aaa+aaaa+aaaaa+… …
例如:2+22+222+2222+22222 ,其中a为2,且有5组数字
输入输出描述
输入两个数据分别为数字a和组数n
输出按照堆叠相加模式算出的和
a, n = eval(input())
sum = 0
num = 0
for i in range(n):
num = num * 10 + a
sum += num
print(sum)
48.输入一个十进制正整数,输出其二进制形式
number = eval(input())
result = ""
while number > 0:
binary_digit = number % 2
result = str(binary_digit) + result
number = number // 2
print(result)
49.输入一个二进制字符串,输出其对应的十进制数字
n = eval(input())
#n = int(num)
i = 0
sum = 0
while n != 0:
i += 1
s = n % 10
n = n // 10
sum = sum + s * 2 ** (i - 1)
print(sum)
50.输入一个十进制正整数,输出其十六进制形式
num = eval(input())
s = ""
while num != 0:
y = num % 16
if y >= 10:
y = chr(ord('A') + y - 9)
s = str(y) + s
num = num // 16
print(s)
51.输入一个十六进制字符串,输出其对应的十进制数字
def int_16(str_16):
print(int(str_16.upper(), 16))
while 1:
try:
s = input()
int_16(s)
except:
52.给定两个字符串 s1 和 s2 ,求两个字符串最长的公共前缀串,字符区分大小写
def longest_common_substring(s1, s2):
m = len(s1)
n = len(s2)
dp = [[0] * (n + 1) for _ in range(m + 1)]
max_len = 0
end = 0
for i in range(1, m + 1):
for j in range(1, n + 1):
if s1[i - 1] == s2[j - 1]:
dp[i][j] = dp[i - 1][j - 1] + 1
if dp[i][j] > max_len:
max_len = dp[i][j]
end = i
lcs = s1[end - max_len: end]
return lcs
s1 = input().strip()
s2 = input().strip()
lcs = longest_common_substring(s1, s2)
print(lcs)
53.
题目描述
给定两个字符串 s1 和 s2 ,求 s2 在 s1 中出现的次数,字符区分大小写,已匹配的字符不计入下一次匹配
输入输出描述
输入两行字符串,分别为s1和s2,s2的长度小于等于s1
输出s2在s1中出现的次数
def count_occurrences(s1, s2):
count = 0
index = 0
while True:
index = s1.find(s2, index)
if index == -1:
break
count += 1
index += len(s2)
return count
s1 = input().strip()
s2 = input().strip()
occurrences = count_occurrences(s1, s2)
print(occurrences)
54.
题目描述
给定两个字符串 s1 和 s2 ,求 s1 与 s2 之间的最长公共子串,字符区分大小写
输入输出描述
输入两行字符串,分别为s1和s2
输出最长公共子串
def longest_common_substring(s1, s2):
m = len(s1)
n = len(s2)
dp = [[0] * (n + 1) for _ in range(m + 1)]
max_len = 0
end = 0
for i in range(1, m + 1):
for j in range(1, n + 1):
if s1[i - 1] == s2[j - 1]:
dp[i][j] = dp[i - 1][j - 1] + 1
if dp[i][j] > max_len:
max_len = dp[i][j]
end = i
lcs = s1[end - max_len: end]
return lcs
s1 = input().strip()
s2 = input().strip()
lcs = longest_common_substring(s1, s2)
print(lcs)
55.
题目描述
一些网站会给密码强加一些规则:
(1)密码必须至少有8个字符
(2)密码只能包含英文字母和数字
(3)密码应该至少包含两个数字
(4)密码应该至少包含两个大写字母
如果密码符合规则,输出Yes;否则输出No
输入输出描述
输入一串密码
输出该密码是否符合规则
password = input()
if len(password) < 8:
print("No")
else:
if not password.isalnum():
print("No")
else:
if sum(1 for c in password if c.isdigit()) < 2:
print("No")
else:
if sum(1 for c in password if c.isupper()) < 2:
print("No")
else:
print("Yes")
56.
回文素数是指一个数既是素数又是回文数,例如 131 既是素数也是回文数
输出显示前 100 个回文素数,每行显示 10 个
num = 2
count = 0
while count < 100:
flag1 = True
for n in range(2, num // 2 + 1):
if num % n == 0:
flag = False
break
if flag1:
str_num = str(num)
restr_num = str_num[::-1]
if str_num == restr_num and num > 100:
print(num, end = "\t")
count += 1
if count % 10 == 0:
print()
num += 1
57.
反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如 17 和 71 都是素数但不是回文数,且反转
后依旧是素数
输出显示前 100 个反素数,每行显示 10 个
num = 2
count = 0
while count < 100:
flag1 = True
flag2 = True
for n in range(2, num // 2 + 1):
if num % n == 0:
flag1 = False
break
str_num = str(num)
restr_num = str_num[::-1]
re_num = int(restr_num)
for i in range(2, re_num // 2 + 1):
if re_num % i == 0:
flag2 = False
break
if flag1 and flag2 and num > 10:
print(num, end = "\t")
count += 1
if count % 10 == 0:
print()
num += 1
58.
双素数是指一对差值为 2 的素数,例如 3 和 5 就是一对双素数, 5 和 7 也是一对双素数
输出显示小于 1000 的双素数
num1 = 2
count = 0
while count < 1000:
flag1 = True
flag2 = True
for n in range(2, num1 // 2 + 1):
if num1 % n == 0:
flag1 = False
break
for i in range(2, num1 // 2 + 1):
num2 = num1 + 2
if num2 % i == 0:
flag2 = False
break
if flag1 and flag2:
print(num1, end = "\t")
count += 1
if count % 10 == 0:
print()
num1 += 1
59.
如果一个素数可以写成 的形式,其中p是某个正整数,那么这个素数就称作梅森素数
输出p≤31的所有梅森素数
num1 = 2
count = 0
p = 1
while p <= 31:
flag1 = True
for n in range(2, num1 // 2 + 1):
if num1 % n == 0:
flag1 = False
break
if flag1:
p = 1
num2 = 2 ** p - 1
while 2 ** p - 1 < num1:
p += 1
num2 = 2 ** p - 1
if num2 == num1:
print(num1, end = "\t")
num1 += 1
60.
有几种实现开平方 的技术,其中一个称为巴比伦法
它通过使用下面公式的反复计算近似地得到:
nextGuess = (lastGuess + n / lastGuess) / 2
当nextGuess和lastGuess几乎相同时,nextGuess就是平方根的近似值
lastGuess初始值为1,如果nextGuess和lastGuess的差值小于一个很小的数,比如0.0001,就可以认为
nextGuess是n的平方根的近似值;否则,nextGuess成为下一次计算的lastGuess,近似过程继续执行
编写代码,求解n的平方根的近似值
n = eval(input())
last = 1.0
epsilon = 0.0001
while True:
new_last = (last + n / last) / 2
if abs(new_last - last) < epsilon:
print(new_last)
break
last = new_last