Demo27 打印数字I
题目描述
利用循环,寻找规律,打印如下数字模式:
模式A
1
1 2
1 2 3
1 2 3 4
1 2 3 4 5
1 2 3 4 5 6
模式B
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
模式C
1
2 1
3 2 1
4 3 2 1
5 4 3 2 1
6 5 4 3 2 1
模式D
1 2 3 4 5 6
1 2 3 4 5
1 2 3 4
1 2 3
1 2
1
print("模式A")
n = 6
for i in range(1 , n + 1) :
for j in range(1 , i + 1) :
print(j , end=" ")
print()
print("模式B")
n = 6
for i in range(1 , n + 1) :
for j in range(1 , n - i + 2) :
print(j , end=" ")
print()
print("模式C")
n = 6
for i in range(1 , n + 1) :
for j in range(n - i, 0 , -1) :
print(" " , end=" ")
for k in range(i , 0 , -1) :
print(k , end=" ")
print()
print("模式D")
n = 6
for i in range(1 , n + 1) :
for j in range(0 , i - 1) :
print(" " , end=" ")
for k in range(1 , n + 2 - i) :
print(k , end=" ")
print()
Demo28 打印数字II
题目描述
利用循环,寻找规律,打印如下数字模式:
1
2 1 2
3 2 1 2 3
4 3 2 1 2 3 4
5 4 3 2 1 2 3 4 5
6 5 4 3 2 1 2 3 4 5 6
7 6 5 4 3 2 1 2 3 4 5 6 7
n = 7
for i in range(1 , n + 1) :
for j in range(1 , n - i + 1) :
print(" " , end=" ")
for k in range(i , 0 , -1) :
print(k , end=" ")
for l in range(2 , i + 1) :
print(l , end=" ")
print()
Demo30 打印菱形I
题目描述
如下所示,是一个高度为9的菱形
*
* *
* * *
* * * *
* * * * *
* * * *
* * *
* *
*
用户输入菱形高度n,并打印出该高度下的菱形
输入输出描述
输入高度n,n为奇数
输出该高度的菱形
Demo31 打印菱形II
题目描述
如下所示,是一个高度为9的菱形
*
* *
* *
* *
* *
* *
* *
* *
*
用户输入菱形高度n,并打印出该高度下的菱形
输入输出描述
输入高度n,n为奇数
输出该高度的菱形
n = int(input())
for i in range(1 , n // 2 + 2) :
print(" " * (n - i) , end="")
for j in range(2 * i - 1) :
if j == 0 or j == 2 * i - 2 :
print("*" , end="")
else :
print(" " , end="")
print()
for i in range(n // 2 , 0 ,-1) :
print(" " * (n - i) , end="")
for j in range(2 * i - 1) :
if j == 0 or j == 2 * i - 2 :
print("*" , end="")
else :
print(" " , end="")
print()
Demo34 最大公约数I
题目描述
输入两个正整数,计算其最大公约数,例如4和2的最大公约数是2,16和24的最大公约数是8
输入输出描述
输入两个数字
输出最大公约数
a,b = map(int,input().split())
list = []
for i in range(1,11) :
if a % i == 0 :
j = i
if b % j == 0 :
list.append(j)
print(list[-1])
Demo36 最小公倍数
题目描述
输入两个正整数,计算其最小公倍数,例如4和2的最小公倍数是4,3和5的最小公倍数是15
输入输出描述
输入两个正整数
输出最小公倍数
a,b = map(int,input().split())
list = []
for i in range(1,101) :
if a * i == b :
print(b)
elif b * i == a :
print(a)
for j in range(1 , 101) :
a1 = a * j
for k in range(1 , 101) :
b1 = b * k
if a1 == b1 :
list.append(a1)
print(list[0])
Demo37 整数的素因子
题目描述
输入一个正整数,然后找出它所有的最小因子,也称之为素因子
输入输出描述
输入一个正整数
输出多行,每行输出一个素因子
num = int(input())
list = []
i = 2
while i < 1000000 :
if num % i == 0 :
list.append(i)
num = num / i
elif num % i != 0 :
i += 1
continue
while num == 0 :
break
for j in list :
print(j , end=" ")
Demo38 完全数
题目描述
如果一个正整数等于除了它本身之外所有正因子的和,那么这个数称为完全数
例如 6 = 3 + 2 + 1,28 = 14 + 7 + 4 + 2 + 1
输入输出描述
输入一个正整数
输出该数是否为完全数
num = int(input())
list = []
a = 0
for i in range(1 , 100000) :
if num % i == 0 :
if num != i :
list.append(i)
else :
continue
for j in list :
a = a + j
if a == num :
print("Yes")
else :
print("No")
Demo40 计算π
题目描述
你可以使用下面的数列近似计算π
π
=
4
(
1
−
1
3
+
1
5
−
1
7
+
1
9
−
1
11
+
.
.
.
+
(
−
1
)
i
+
1
2
i
−
1
)
π=4(1-\frac{1}{3}+\frac{1}{5}-\frac{1}{7}+\frac{1}{9}-\frac{1}{11}+...+\frac{(-1)^{i+1}}{2i-1})
π=4(1−31+51−71+91−111+...+2i−1(−1)i+1)
当i越大时,计算结果越近似于π
num = int(input())
jian = 0
jia = 0
for i in range(1 , num + 1) :
if i % 2 == 0 :
jian = ((-1 ** (i + 1)) / (2 * i) - 1)
if i >= 2 :
jian += jian
elif i % 2 != 0 :
jia = ((1 ** (i + 1)) / (2 * i) - 1)
if i > 2 :
jia += jia
print(f"pi = {4 * (jia + jian)}")
Demo43 组合问题I
题目描述
在数字范围[1,7]之间,任意选择两个不相同的数作为一个组合,输出每一组组合,并统计所有组合的个数
注:组合(a,b)与组合(b,a)算同一种组合,只记录一次
count = 0
for i in range(2 , 8) :
a = i
for j in range(1 , 8) :
b = j
if a == b :
continue
elif a != b and b < a:
print(a,b)
count += 1
print(f"共{count}次")
Demo44 组合问题II
题目描述
有1、2、3、4这个四个数字,能组成多少个互不相同且无重复数字的三位数?分别又是多少?
count = 0
for i in range(1 , 5) :
a = i
for j in range(1 , 5) :
b = j
for k in range(1 , 5) :
c = k
count += 1
if a != b and a != c and b != c :
print(f"{100 * a + 10 * b + c}")
print(f"共{count}个")
Demo46 青蛙跳台阶
题目描述
一只青蛙,一次可以跳一个台阶或者两个台阶,现有n个台阶,问该青蛙有多少种不同的跳法?
例如:两个台阶,有两种跳法(1+1,2);四个台阶,有五种跳法(1+1+1+1,2+1+1,1+2+1,1+1+2,2+2)
n = int(input())
if n == 1 :
print(f"{1}种")
elif n == 2 :
print(f"{2}种")
elif n > 2 :
print(f"{(n - 1) + (n - 2)}种")
Demo47 堆叠相加
题目描述
现有堆叠相加模式
a
+
a
a
+
a
a
a
+
a
a
a
a
+
a
a
a
a
a
+
.
.
.
.
.
.
a+aa+aaa+aaaa+aaaaa+......
a+aa+aaa+aaaa+aaaaa+......
例如:
2
+
22
+
222
+
2222
+
22222
2+22+222+2222+22222
2+22+222+2222+22222,其中a为2,且有5组数字
输入输出描述
输入两个数据分别为数字a和组数n
输出按照堆叠相加模式算出的和
a,n = map(int,input().split())
num = a
b = 0
a1 = a
for i in range(1 , n) :
if a == 1 :
num = a
elif a > 1 :
a1 = 10 * a1 + a
b = a1
num += a1
print(num)
Demo48 十进制转二进制
题目描述
输入一个十进制正整数,输出其二进制形式
输入输出描述
输入一个十进制正整数
输出二进制字符串
num = int(input())
s = ""
while num > 0 :
s = str(num % 2) + s
num //= 2
print(s)
Demo49 二进制转十进制
题目描述
输入一个二进制字符串,输出其对应的十进制数字
输入输出描述
输入一个二进制字符串
输出十进制数字
num = input("")
a = 0
length = len(num)
for x in range(length):
a += int(num[length-1-x]) * pow(2, x)
print(a)
Demo52 最长公共前缀
题目描述
给定两个字符串 s1 和 s2 ,求两个字符串最长的公共前缀串,字符区分大小写
输入输出描述
输入两行,分别表示s1和s2
输出前缀串
s1 = str(input())
s2 = str(input())
list = []
for i in s1 :
for j in s2 :
if i == j :
list.append(i)
for x in list :
print(x , end="")
Demo53 子串出现的次数
题目描述
给定两个字符串 s1 和 s2 ,求 s2 在 s1 中出现的次数,字符区分大小写,已匹配的字符不计入下一次匹配
输入输出描述
输入两行字符串,分别为s1和s2,s2的长度小于等于s1
输出s2在s1中出现的次数
s1 = str(input())
s2 = str(input())
sount = 0
a = ""
for i in s1 :
for j in s2 :
if i == j :
a = s1[(i - 1)] + i + s1[(i + 1)]
if a == s2 :
sount += 1
print(sount)
Demo55 检测密码
题目描述
一些网站会给密码强加一些规则:
(1)密码必须至少有8个字符
(2)密码只能包含英文字母和数字
(3)密码应该至少包含两个数字
(4)密码应该至少包含两个大写字母
如果密码符合规则,输出Yes;否则输出No
输入输出描述
输入一串密码
输出该密码是否符合规则
pw = str(input())
lenth = True
text = True
menber = True
word = True
big = 0
num = 0
if len(pw) >= 8 :
lenth = True
else :
lenth = False
for i in pw :
if chr(65) <= ord(i) <= chr(90) or chr(97) <= ord(i) <= chr(122) or chr(48) <= ord(i) <= chr(57) :
text = True
else :
text = False
for j in pw :
if chr(48) <= ord(j) <= chr(57) :
num += 1
if num >= 2 :
menber = True
else :
menber = False
for k in pw :
if chr(65) <= ord(k) <= chr(90) :
big += 1
if big >= 2 :
word = True
else :
word = False
if lenth and text and menber and word :
print("Yes")
else :
print("No")
Demo56 回文素数
题目描述
回文素数是指一个数既是素数又是回文数,例如131既是素数也是回文数
输出显示前100个回文素数,每行显示10个
def is_prime(n : int) :
if n < 2 :
return False
for i in range(2 , n // 2 + 1):
if n % i == 0 :
return False
else:
return True
def is_huiwen(n : int):
if str(n) == str(n)[::-1]:
return True
count = 0
n = 2
while count < 100 :
if is_prime(n) and is_huiwen(n) :
print("%5d" %n , end=" ")
count += 1
if count % 10 == 0 :
print()
n += 1
Demo57 反素数
题目描述
反素数是指一个将其逆向拼写后也是一个素数的非回文数,例如17和71都是素数但不是回文数,且反转后依旧是素数
输出显示前100个反素数,每行显示10个
def is_prime(n : int) :
if n < 2 :
return False
for i in range(2 , n // 2 + 1):
if n % i == 0 and str(n) == str(n)[::-1]:
return False
else:
return True
def is_rprime(n : int):
m = n[::-1]
if m < 2 :
return False
for i in range(2 , m // 2 + 1) and str(n) == str(n)[::-1]:
if m % i == 0 :
return False
else:
return True
count = 0
n = 2
while count < 100 :
if is_prime(n) and is_rprime(n) :
print("%5d" %n , end=" ")
count += 1
if count % 10 == 0 :
print()
n += 1
Demo58 双素数
题目描述
双素数是指一对差值为2的素数,例如3和5就是一对双素数,5和7也是一对双素数
输出显示小于1000的双素数
def is_prime(n : int) :
if n < 2 :
return False
for i in range(2 , n // 2 + 1):
if n % i == 0:
return False
else:
return True
count = 0
n = 2
ls = []
while n < 1000:
if is_prime(n) :
ls.append(n)
n += 1
for i in range(len(ls)):
if ls[i + 1] - ls[i] == 2:
print(ls[i] , "和" , ls[i + 1] , "是一对双素数")
Demo59 梅森素数
如果一个素数可以写成
2
p
−
1
2^p-1
2p−1的形式,其中p是某个正整数,那么这个素数就称作梅森素数
输出p≤31的所有梅森素数
def is_prime(n : int) :
if n < 2 :
return False
for i in range(2 , n // 2 + 1):
if n % i == 0 :
return False
else:
return True
n = 2
while True:
if is_prime(n):
for p in range(32):
if 2 ** p - 1 == n:
print(n)
n += 1
while n > 2 ** 31:
break
Demo60 平方根的近似求法
有几种实现开平方
n
\sqrt{n}
n的技术,其中一个称为巴比伦法
它通过使用下面公式的反复计算近似地得到:
n
e
x
t
G
u
e
s
s
=
(
l
a
s
t
G
u
e
s
s
+
n
/
l
a
s
e
t
G
u
e
s
s
)
/
2
nextGuess=(lastGuess+n/lasetGuess)/2
nextGuess=(lastGuess+n/lasetGuess)/2
当nextGuess和lastGuess几乎相同时,nextGuess就是平方根的近似值
lastGuess初始值为1,如果nextGuess和lastGuess的差值小于一个很小的数,比如0.0001,就可以认为nextGuess是n的平方根的近似值;否则,nextGuess成为下一次计算的lastGuess,近似过程继续执行
编写代码,求解n的平方根的近似值
n = int(input("请输入根号下的值:"))
lastGuess = 1
while True:
nextGuess = (lastGuess + (n / lastGuess)) / 2
judge = abs(nextGuess - lastGuess)
if judge < 0.0001 :
print("n的平方根的近似值为:" , nextGuess)
break
else :
lastGuess = nextGuess
continue