"""
第一题:求解水仙花数
水仙花数,也被称为自恋数、自幂数、阿姆斯壮数或阿姆斯特朗数(Armstrong number),是一个n位数(n≥3),其每个位上的数字的n次幂之和等于它本身。
例如,三位数153是一个水仙花数,因为1^3 + 5^3 + 3^3 = 153。在三位数中,除了153,还有370、371和407也是水仙花数。
"""
print("100 ~ 1000 之间的所有水仙花为:", end=" ")
for i in range(100, 1000):
sum = 0 # 定义一个变量,记录这个数各个位置上的数三次方的和
num = i
while num > 0:
value = num % 10 # 先求解出个位,然后求解出十位,最后求解出百位
sum = sum + value * value * value # sum 依次相加各个位置上数的三次方和
num = num // 10 # 求解出十位,百位
if sum == i:
print(i, end=" ")
print()
"""
第二题:求100以内的所有质数
所谓质数:除了本身和1,没有其他的约数
"""
print("100以内的所有质数为:")
for i in range(2, 100):
j = 2 # 初始化 j = 2
while j < i: # 从 2 ~ i - 1 之间,每一个数都需要判断是否能被 i 整除
if i % j == 0: # 如果 j 能被 i 整除时,就说明:j 是 i 的因数
break # 直接跳出就近的所属循环
j = j + 1
if i == j: # 若 while 循环执行完毕,没有一个 j 能被 i 整除时,此时 i 一定等于 j 就说明 i 是质数
print(i, end=" ")
"""
第三题:打印三角形:给定一个整数 n,在屏幕上输出一个直角三角形
例如:输入整数 5,输出:
*
**
***
****
*****
"""
n = int(input("(输出三角形)请输入一个整数:"))
for row in range(1, n + 1): # 每一行进行处理
for j in range(1, row + 1): # 一行的所有 *
print("*", end="")
print() # 一行打印完之后,回车换行
"""
第四题:给一个整数,求出各个位上的和
例如:n = 12345 输出:1+2+3+4+5=15
以下是三种方式
"""
# 第一种求解方式
n = int(input("(求各个位置上的数之和)请输入一个整数:"))
sum_value = 0
while n > 0:
sum_value = sum_value + n % 10
n = n //10
print("这个数的各个位上的数之和:", sum_value)
# 第二种求解方式
n = int(input("(求各个位置上的数之和)请输入一个整数:"))
lst = []
while n > 0:
lst.append(n % 10)
n = n // 10
print("这个数的各个位上的和:", sum(lst))
# 第三种求解方式
n = input("(求各个位置上的数之和)请输入一个整数:") # n 个字符串
sum_value = 0
for i in n:
sum_value = sum_value + int(i) # 字符串遍历,取出来每一个字符,然后强转为 int 类型
print("这个数的各个位上的和:", sum_value)
"""
第五题:输入一个整数 n 求出第 n 个整数的斐波拉切数列
斐波那契数列:1,1,2,3,5,8,13,21,34,55,89...,不难发现一个规律,实际上从第三个数开始,每个数字的值都是前两个数字的和;
例如:输入的整数为 5 输出:5
"""
n = int(input("(求解斐波拉切数列)请输入整数:"))
if n == 1 or n == 2:
print(1)
else:
value1, value2 = 1, 1 # 由于下一个数,需要前面两个数的累加和,所以需要定义两个变量存储前面两个变量的值
for i in range(3, n + 1):
result = value1 + value2
value1 = value2
value2 = result
print("求解的斐波拉切数列的值为:", result)
"""
第六题:求解两个数的最大公约数和最小公倍数
备注:最小公倍数 = 两整数的乘积 ÷ 最大公约数
(1)辗转相除法
有两整数a和b:
① a % b 得余数 c
② 若 c = 0,则 b 即为两数的最大公约数
③ 若 c ≠ 0,则 a = b,b = c,再回去执行①
例如求 27 和 15 的最大公约数过程为:
27 % 15 = 12,15 % 12 = 3,12 % 3 = 0因此,3 为 最大公约数
"""
a= int(input("请输入第一个整数:"))
b = int(input("请输入第二个整数:"))
if b > a: # 如果输入的第二个整数 > 第一个整数,互换一下位置
a, b = b, a
m = a # 记录最大值 m = a
n = b # 记录次大值 n = b
while b != 0:
value = a % b # 两个数求余
a = b # 次大值赋值给最大值
b = value # 余数赋值给次大值
print("两个数的最大公约数:", a)
print("两个数的最小公倍数:", (m * n) // a)
"""
第七题:数的逆序输出
例如:1234 输出:4321
思路:数进行拆分,然后依次反向进行 * 10 做累加
"""
n = int(input("(数的逆序输出)请输入一个整数:"))
reverse_value = 0
while n > 0:
value = n % 10 # 数的位置进行拆分
reverse_value = reverse_value * 10 + value # 拆分完之后进行 * 10 做累加
n = n // 10 # n 进行变化
print("逆序输出:", reverse_value)
"""
第八题:判断随机输入的年份是不是闰年??
符合条件之一是闰年:1. 能被4整除,但不能被100整除 2. 能被400整除!
"""
year = int(input("请输入年份:"))
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
print("{}是闰年!".format(year))
else:
print("{}不是闰年!".format(year))
"""
第九题:求解四叶玫瑰数
四叶玫瑰数是 4 位数的自幂数。自幂数是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。
(例如:当 n 为 3 时,有 1^3 + 5^3 + 3^3 = 153,153 即是 n 为 3 时的一个自幂数,3 位数的自幂数被称为水仙花数)。
"""
print("1000 ~ 10000 之间所有的四叶玫瑰数为:")
for i in range(1000, 10000):
i1 = i // 1000 # 取千位数字 1234//1000=1
i2 = i // 100 % 10 # 取百位数字 1234//100=12 12%10=2
i3 = i // 10 % 10 # 取十位数字 1234//10=123 123%10=3
i4 = i % 10 # 取个位数字 1234%10=4
if i1 ** 4 + i2 ** 4 + i3 ** 4 + i4 ** 4 == i:
print(i, end=" ")
print()
"""
第十题:逆序输出字符串
例如:abcdefg 输出:gfedcba
"""
# 求解方式一
str = input("请输入字符串:")
print(str[::-1])
# 求解方式二
s = input("请输入字符串:")
lst = []
for x in range(0, len(s)):
lst.append(s[x])
print(''.join(lst)) # 使用列表的拼接方式,这里使用 空字符串