给定一个以米为单位的面积,重复移除最大的正方形

Given an area in meters, repeatedly remove the largest possible square

所以我正在学习python,想解决一个以面积为整数输入并计算用它可以做出多少平方米的问题。

例子

比如输入12米的面积(输入12),可以制作一个3x3平方米(面积9米)。那会给你留下3米的面积,所以你可以把它们变成三个1x1平方米。

示例输入和输出。

input: function(12)
output: 9,1,1,1

input: function(22)
output: 16, 4, 1, 1

input: function(15324)
output: 15129,169,25,1

我尝试了以下方法,但我不能完全做到。

def area(num):
    return num * num

number = float(input(" Please Enter any numeric Value : "))

area= square(number)

print(area)

我只尝试return给定数字的平方数,但我如何根据问题改进它?

你可以把这个问题转化为一个find the closest square number问题,所以你需要计算输入面积的平方根并使用math库对这个值求底,得到最接近的平方人数:

import math

area = float(input(" Please Enter any numeric Value : "))
sqrt = area**0.5
closest = math.floor(sqrt)**2
print(closest, area-closest)

输出:

Please Enter any numeric Value : 12
9 3.0

我认为您已接近解决方案。 我实施了一个简单但有效的解决方案。


import math

def square(n):
    lis = []
    
    rest = n
    while n > 0:
        rest = math.floor(math.sqrt(n))**2
        lis.append(rest)
        n-= rest
    return(lis)

可以看到,这一行math.floor(math.sqrt(n))^2就是计算小于n的最接近的完美平方。然后,我将结果保存在一个列表中,并用减去 n 减去其余部分来更新 n 值。使用 while 循环迭代此过程,我获得了包含您指定结果的最终列表。

square(12)
>>> [9, 1, 1, 1]
square(22)
>>> [16, 4, 1, 1]
square(15324)
>>> [15129, 169, 25, 1]

编辑
提示命令执行函数。

n = float(input(" Please Enter any numeric Value : "))
square(n)

总之,如果你想要一个all-in函数,里面有提示。


import math

def square_prompt():
    n = 1
    while n>0:
        n = float(input(" Please Enter any numeric Value : "))
        if n:
            print(square(n))

square_prompt()

注意。如果您插入一个小于等于 0 的数字,您将停止循环(这意味着用户没有任何其他数字可以向程序询问)。

你可以用 while 循环来完成:

import numpy as np


def func(a):
    lst = []
    while a: # Repeat until a reaches 0
        n = int(np.sqrt(a))**2 # Largest square number < a
        a -= n # Reduce a by n
        lst.append(n) # Append n to a list and repeat
    return lst

print(func(12))
print(func(22))
print(func(15324))

输出:

[9, 1, 1, 1]
[16, 4, 1, 1]
[15129, 169, 25, 1]
from math import sqrt

def square(n):
    lst = [] # Empty List
    while True: 
        for a in range(1,int(n)): 
            if n-a > 0:
                 if round(sqrt(n-a)) == sqrt(n-a):
                    lst.append(str((round(n-a)))) # I am check that if round of square of a number is equal to square of number because sqrt gives square for every not but I need only perfect square. Square Of 3 is 1.732 but this is a perfect square not then round(1.732) returns 2 which is not equal to 1.732.

                    n = a 
        if n==4: # This line is because 4-Anything is not a perfect square therefore I need to add a custom if statement. 
            lst.append(str(4)) # Because 4 is a perfect square of therefore I add 4 to the list.
            n = 0
            break # exit While Loop 
        if n<=4: # Because if n is 3 then I need to add 1 to the list for n times.
            break # exit While loop
    for a in range(int(n)): # add 1 to n times in lst if n is less than 4.
        lst.append('1')
    return ' '.join(lst)

def area(num):
    return num * num

number = float(input(" Please Enter any numeric Value : "))

area= square(number)

print(area)

输出:


IN:22, OUT:16 4 1 1

这就是我可以向你解释的。