基础的几道枚举算法题,解题方法很多

413 阅读4分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

1、输入一个100以内的数,找出100以内(包括100)比它大的数

思路: ①列举1~100的数; ②将列举的数依次和输入的数比较; ③输出符合条件的数。

  • 方法一
num = int(input('输入一个100以内的数:'))
for i in range(1, 101, 1):
    if i > num:
        print(i, end=' ')
  • 方法二
i = 1
while i <= 100:
    if i > num:
        print(i, end=' ')
    i += 1

输出: 在这里插入图片描述

2、输入一个数,将这个数的所有因数输出

思路: ①列举1~n的数; ②将列举的数依次和输入的数比较; ③输出能够n其整除的数。

inp = int(input('请输入一个数:'))
for i in range(1, inp + 1, 1):
    if inp % i == 0:
        print(i, end=' ')

输出: 在这里插入图片描述

3、设计一个算法找出1000以内 所有的“完全数”。

分析:如果一个自然数恰好等于它的因子之和,这个数就称 为“完全数”。例如,6就是一个“完全数”,因为6的因 子为1、2、3,而6=1+2+3。

思路: (1)列举出1~1000以内的数 (2)列举出每个数的所有因数 (3)找出所有因数相加等于原数的所有原数,即是1000以内的所有的完全数

for i in range(1, 1001, 1):
    n = 0
    for j in range(1, i, 1):
        if i % j == 0:
            n += j
    if n == i:
        print(n, end=' ')

输出: 在这里插入图片描述

4、有个人的支付宝支付密码忘记了,他急需在30分钟内完 成货款的支付,请用python编程帮他找回密码。他零星记得自己的支付密码信息: ①密码是6位数字,前面两位为85; ②最后两位数字相同; ③能被13和33整除。

for i in range(850000, 859999, 1):
    a = i % 10    # 最后一位
    b = i // 10 % 10     # 倒数第二位,//表示整除
    if a == b:
        if i % 13 == 0 and i % 33 == 0:
            print(i, end=' ')

输出: 在这里插入图片描述

5、小明是个急性子,上小学的时候经常把老师写在黑板上的题目抄错了。 有一次,老师出的题目是:36 x 495 = ? 他却给抄成了:396 x 45 = ? 但结果却很戏剧性,他的答案竟然是对的!! 因为 36 * 495 = 396 * 45 = 17820 类似这样的巧合情况可能还有很多,比如:27 * 594 = 297 * 54 假设 a b c d e 代表1~9不同的5个数字(注意是各不相同的数字,且不含0) 能满足形如: ab * cde = adb * ce 这样的算式一共有多少种呢?

n = 0
for i in range(12345, 98766, 1):
    # i=abcde
    a = i // 10000
    b = i // 1000 % 10
    c = i // 100 % 10
    d = i // 10 % 10
    e = i % 10
    if a == 0 or b == 0 or c == 0 or d == 0 or e == 0 or a == b or a == c or a == d or a == e or b == c or b == d or b == e or c == d or c == e or d == e:
        continue
    if (a * 10 + b) * (c * 100 + d * 10 + e) == (a * 100 + d * 10 + b) * (c * 10 + e):
        n += 1
        print((a * 10 + b) ,"*", (c * 100 + d * 10 + e), "=", (a * 100 + d * 10 + b) ,"*", (c * 10 + e))
print(n)

输出: 在这里插入图片描述 在这里插入图片描述

6、有一盒乒乓球,9个9个数最后余下7个,5个5个数最后余下2个,4个4个数最后余下1个,问这盒乒乓球至少有多少个?

x = 0
while True:
    if x % 9 == 7 and x % 5 == 2 and x % 4 == 1:
        break
    x += 1
print(x)

输出: 在这里插入图片描述

7、输出1~n中每个数的因子有哪些,从小到大输出! 比如:n=10,那么输出结果如下。 请输入一个数字:10 1:1 2:1 2 3:1 3 4:1 2 4 5:1 5 6:1 2 3 6 7:1 7 8:1 2 4 8 9:1 3 9 10:1 2 5 10

n = input('请输入一个数字:')
n = int(n)
for i in range(1, n + 1, 1):
    s = str(i) + ":"
    for j in range(1, i + 1, 1):
        if i % j == 0:
            s += str(j) + " "
    print(s)

输出: 在这里插入图片描述

8、我家的门牌号 我家住在一条硬胡百里这条胡同的门牌号从1开始,顺序编号。 若所有的门牌号之和减去我家门牌号的两倍正好等于 100 , 求我家的门牌号及总共有多少家。

分析:1+2+...+m-1+m+m+1+..+x - m * 2 = 100

j = 0
count = 0
for m in range(1, 10000, 1):
    sums = 0
    for i in range(1, m + 1, 1):
        sums += i
    count = m
    j = m
    while sums - m * 2 < 100:
        count += 1
        sums += count
    if sums - m * 2 == 100:
        break
print(j)
print(count)

输出: 在这里插入图片描述