# 程序逻辑

我们思考一个问题:如何通过所学的知识去解决实际的问题呢,那么就需要不断地锻炼我们的思维。下面我们通过前面所学的知识去解决一下实际问题。

1、寻找水仙花数

水仙花数(Narcissistic Number)也被称为阿姆斯特朗数(Armstrong Number),是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。例如,153 是一个 3 位数的水仙花数,因为 1^3 + 5^3 + 3^3 = 153。


def is_narcissistic(num):
    str_num = str(num)
    n = len(str_num)

    sum_of_num = 0

    for bit in str_num:
        sum_of_num += int(bit) ** n
    
    return num == sum_of_num

# 列举出 100~1000 的水仙花数
narcissistic = [x for x in range(100,1001) if is_narcissistic(x)]

print(narcissistic)



2、给定一个正整数,输出其反转数,比如12345,输出54321

def reversal_num(num):
    reversed_num = 0
    while num > 0:
        reversed_num = reversed_num * 10 + num % 10
        num //= 10
    return reversed_num

num = int(input('请输入数字:'))
print(reversal_num(num))

3、百钱百鸡问题,公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?

for x in range(0, 20):
    for y in range(0, 33):
        z = 100 - x - y
        if 5 * x + 3 * y + z / 3 == 100:
            print(f'公鸡: {x}只, 母鸡: {y}只, 小鸡: {z}只')

4、生成斐波那契数列的前20个数。

def fibonacci_iterative(n):  
    if n <= 0:  
        return []  
    elif n == 1:  
        return [1]  
    elif n == 2:  
        return [1, 1]  
    else:  
        sequence = [1, 1]  
        for _ in range(2, n):  
            sequence.append(sequence[-1] + sequence[-2])  
        return sequence  
  
print(fibonacci_iterative(20))

5、找出10000以内的完美数

def is_perfect(n):  
    if n <= 1:  
        return False  
    divisor_sum = 1  # 1总是因子,但我们不包括n本身  
    for i in range(2, int(n**0.5) + 1):  # 只检查到sqrt(n)即可,因为因子成对出现  
        if n % i == 0:  
            divisor_sum += i  
            if i != n // i:  # 避免重复加入平方根因子  
                divisor_sum += n // i  
    return divisor_sum == n  
  
# 找出10000以内的所有完美数  
perfect_numbers = [num for num in range(1, 10001) if is_perfect(num)]  
print(perfect_numbers)

6、输出100以内的所有的素数

def is_prime(n):  
    """检查一个数是否为素数"""  
    if n < 2:  
        return False  
    for i in range(2, int(n**0.5) + 1):  
        if n % i == 0:  
            return False  
    return True  
  
# 输出100以内所有的素数  
print([x for x in range(1,101) if is_prime(x)])