编程心得

    技术2024-10-12  56

    一个条件计数问题

    """用1,2,3,4,5五个数字,不许重复,可以写多少个3的倍数?""" string = ['1', '2', '3', '4', '5'] count = 0 def no_repetition(s): for i in range(4): for j in range(i + 1, 5): if s[i] == s[j]: return False return True for p1 in string: for p2 in string: for p3 in string: for p4 in string: for p5 in string: st = p1 + p2 + p3 + p4 + p5 if no_repetition(st): if eval(st) % 3 == 0: count += 1 print(st) print(count)

    早上起来翻看这道题的答案(在一本计数的书里,查了一下作者,都是大名鼎鼎,不过那本书是1983年印刷的,不知道是否修订过),竟然是175,与我的120有较大出入。略加反思,知道错误所在。我这个程序,只考虑了五位数的统计,一至四位的没有统计。重新修改这个程序,得到的结果居然是177,无语了,大家帮帮我。

    """用1,2,3,4,5五个数字,不许重复,可以写多少个3的倍数?""" string = ['1', '2', '3', '4', '5', ''] count = 0 result = [] def no_repetition(ss): length = len(ss) for i in range(length - 1): for j in range(i + 1, length): if ss[i] == ss[j]: return False return True for p1 in string: for p2 in string: for p3 in string: for p4 in string: for p5 in string: st = p1 + p2 + p3 + p4 + p5 if len(st) > 0: if no_repetition(st): if eval(st) % 3 == 0: result.append(st) result = set(result) print(result) print(len(result))

    换一种思路,从3-54321对符合要求的数进行筛选,结果仍然是177,这一回,我选择相信自己。

    """用1,2,3,4,5五个数字,不许重复,可以写多少个3的倍数?""" def no_repetition(ss): for j in ss: if j == '0' or j > '5': return False length = len(ss) for j in range(length - 1): for k in range(j + 1, length): if ss[j] == ss[k]: return False return True count = 0 for i in range(3, 54322, 3): if no_repetition(str(i)): count += 1 print(i) print(count)
    Processed: 0.010, SQL: 9