Py学习  »  Python

5操作python计算器

Python • 5 年前 • 1403 次点击  

在这里,我实现了一个非常简单的计算器,只有5个操作。 有2个整数输入

代码旨在通过执行这些操作,输出从第一个输入到第二个输入的可能性(程序)的数量:

  • 将屏幕上的当前数字乘以2

  • 将屏幕上的当前数字乘以3

  • 在屏幕上的当前号码上加5

  • 在屏幕上的当前号码上加7

  • 取屏幕上当前数字的平方

一些测试代码

样本输入1:

2个
10个

样本输出1:

0个

样本输入2:


20个

样本输出2:

5个

样本输入3:

5个
100个

样本输出3:

34660个

问题是由于某种原因,我在测试样本3中得到了34658!我不知道我错在哪一部分

x = int(input())
y = int(input())

if x > 1 and y > x:
    num_of_programs = [None] * (y + 1)

    for i in range(x):
        num_of_programs[i] = 0

    num_of_programs[x] = 1

    for i in range(x + 1, y + 1):
        num_of_programs[i] = 0
        if i % 2 == 0 and i // 2 >= x:
            num_of_programs[i] += num_of_programs[i // 2]
        if i % 3 == 0 and i // 3 >= x:
            num_of_programs[i] += num_of_programs[i // 3]
        if i - 5 >= x:
            num_of_programs[i] += num_of_programs[i - 5]
        if i - 7 >= x:
            num_of_programs[i] += num_of_programs[i - 7]
        if i ** (1/2) == x:
            num_of_programs[i] += num_of_programs[int(i ** (1/2))]

    print(num_of_programs[y])
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/51592
 
1403 次点击  
文章 [ 2 ]  |  最新文章 5 年前
finefoot
Reply   •   1 楼
finefoot    5 年前

下面是另一种使用递归函数的“暴力”解决方案:

def calc(number, target, program="", programs=None):
    if programs is None:
        programs = []
    if number == target:
        programs.append(program)
        return
    if number > target:
        return
    calc(number * 2, target, program + "A", programs)
    calc(number * 3, target, program + "B", programs)
    calc(number + 5, target, program + "C", programs)
    calc(number + 7, target, program + "D", programs)
    calc(number ** 2, target, program + "E", programs)
    return programs

示例调用:

>>> len(calc(2, 10))
0
>>> len(calc(3, 20))
5
>>> len(calc(5, 100))
34660

您还可以检查指向目标的实际程序:

>>> calc(3, 20)
['ADD', 'CCD', 'CDC', 'DA', 'DCC']
  • A :将屏幕上的当前数字乘以2
  • B :将屏幕上的当前数字乘以3
  • C :在屏幕上的当前数字上添加5
  • D :在屏幕上的当前数字上添加7
  • E :取屏幕上当前数字的平方
Anatoliy R
Reply   •   2 楼
Anatoliy R    5 年前

您犯了一个错误-必须确保平方根是整数并且大于或等于 x ,但不完全是 (见以下评论):

if x > 1 and y > x:
    num_of_programs = [None] * (y + 1)

    for i in range(x):
        num_of_programs[i] = 0

    num_of_programs[x] = 1

    for i in range(x + 1, y + 1):
        num_of_programs[i] = 0
        if i % 2 == 0 and i // 2 >= x:
            num_of_programs[i] += num_of_programs[i // 2]
        if i % 3 == 0 and i // 3 >= x:
            num_of_programs[i] += num_of_programs[i // 3]
        if i - 5 >= x:
            num_of_programs[i] += num_of_programs[i - 5]
        if i - 7 >= x:
            num_of_programs[i] += num_of_programs[i - 7]
        # fix here!
        if i ** (1/2) - int(i ** (1/2)) == 0 and i ** (1/2) >= x:
            num_of_programs[i] += num_of_programs[int(i ** (1/2))]

    print(num_of_programs[y])