计算 0 到 26 之间的整数中"Nines"、"Threes"和"Ones"的数量



我遇到了一个问题,我无法在网上找到解决方案。也许我没有输入正确的单词来进行准确的搜索。然而,问题是这样的:

求出9,3和1加在一起可以得到给定整数的个数。同时乘以1 3 9

换句话说,假设n = 25,我们将有2个(9),2个(3)和1个(1)。当我们将它们相乘

2 * 9 = 18

2 * 3 = 6

1 * 1 = 1

total = 18 + 6 + 1 = 25 = n.

我能够找到一个解决方案;然而,我想知道是否有一个更小的版本。

这是我的代码。

def one_3_9(num):
temp = num
threes = []
ones = []
nines = []
val_ = 0
while temp != 0:
if 0 < num <=8:
if num >= 3:
val_ = num // 3
threes.append(val_)
temp = temp - (3 * val_)
ones.append(temp)
temp = temp - temp
elif num < 3:
ones.append(num)
temp = temp - temp
if 26 >= num >= 9:
val_ = num // 9
nines.append(val_)
temp = temp - (9 * val_)
ones.append(temp)
temp = temp - temp
if temp >= 3:
num = temp
val_ = num // 3
threes.append(val_)
temp = temp - (3 * val_)
ones.append(temp)
temp = temp - temp
else:
print("Number Should be more than 0 and less than 26.")
break
print("threes: ", threes)
print("Ones : ", ones)
print("nines: ", nines)
我完全同意这个答案是冗长的,也许我的解释也是如此。但是,我真的希望这个例子对你有意义。

谢谢。

你所描述的是计算你的数字以3为基数的三位数字,假设它小于27。

下面是一些简单的代码:
def one_3_9(num):
nines = num // 9
threes = (num%9) // 3
ones = num % 3
print("Nines:", nines)
print("Threes:", threes)
print("Ones:", ones)

按降序循环遍历这些值,使用模数除法找出它可以进入值的次数,并从运行值中减去结果:

def goes_into(n, vals):
result = {}
for i in sorted(vals, reverse=True):
into = n // i
result[i] = into
n -= i * into
if n % i:
raise ValueError("n is not attainable by vals")
return result

>>> goes_into(25, [1, 3, 9])
{9: 2, 3: 2, 1: 1}

方法之一:

def calculate(num):
nines = num//9
threes = (num-(9*nines))//3
ones = num - (9*nines) - (3*threes)
print (f'{num} requires: 9s: {nines}, 3s: {threes}, 1s: {ones}')

calculate(49)
calculate(25)
calculate(37)

输出:

49 requires: 9s: 5, 3s: 1, 1s: 1
25 requires: 9s: 2, 3s: 2, 1s: 1
37 requires: 9s: 4, 3s: 0, 1s: 1

你好,我对答案做了另一个尝试,基本上它是非常类似于我之前的问题中的答案。它更多的是在代码本身内完成的编辑。

def ones_threes_nines(num):
val = 0
nines = []
threes = []
ones = []
if num > 0 and num <= 26:
val = num // 9
nines.append(val)
num = num - (val*9)
val = num // 3
threes.append(val)
num = num - (val*3)
ones.append(num) 
else:
print("Number should be more than 0 ")
print("Nines: ", nines, "Threes: ", threes, "Ones : ", ones)

这只是对我之前的回答的一个改进,主要包括编辑和轻微的改进。我希望这符合问题本身,得到一个简短的答案。

最新更新