然后必須列印總和和最后添加的數字以及添加的數字的數量。
我目前卡住了,我設法讓總和部分作業。最后添加的數字輸出被列印出來,"23"但應該是"21". 最后,如何列印添加的數字數量?
輸出目標: 121, 21, 11
這是我的代碼:
n = int()
sum = 0
k = 1
while sum <= 100:
if k%2==1:
sum = sum k
k = k 2
print('Sum is:', sum)
print("last number:", k)
編輯:感謝大家的幫助和解答!
uj5u.com熱心網友回復:
請注意,(您可以通過歸納證明)
1 3 5 ... 2 * n - 1 == n**2
<----- n items ----->
到目前為止,為了讓n您所要做的一切都很好,就是計算平方根:
n = sqrt(sum)
在的情況下,100我們可以發現n,當sum達到100如
n = sqrt(100) == 10
所以當n == 10那時sum == 100,當n = 11(最后一項是2 * n - 1 == 2 * 11 - 1 == 21)sum超過時100:它將是
n*n == 11 ** 2 == 121
一般情況下
n = floor(sqrt(sum)) 1
代碼:
def solve(s):
n = round(s ** 0.5 - 0.5) 1;
print ('Number of numbers added: ', n);
print ('Last number: ', 2 * n - 1)
print ('Sum of numbers: ', n * n)
solve(100)
我們在這里不需要回圈,可以有O(1)時間和空間復雜度的解決方案(請,小提琴)
更多演示:
test : count : last : sum
-------------------------
99 : 10 : 19 : 100
100 : 11 : 21 : 121
101 : 11 : 21 : 121
uj5u.com熱心網友回復:
更改您的while回圈,以便您break在頂部之前進行測驗:
k=1
acc=0
while True:
if acc k>100:
break
else:
acc =k
k =2
>>> k
21
>>> acc
100
如果您希望在中斷之前121添加累加器k:
k=1
acc=0
while True:
if acc k>100:
acc =k
break
else:
acc =k
k =2
uj5u.com熱心網友回復:
如果您有興趣嘗試一些部分求和,您會立即認識到完美平方的序列。因此,有 11 個術語,最后一個數字是 21。
print(121, 21, 11)
更嚴重的是:
i, s= 1, 1
while s <= 100:
i = 2
s = i
print(s, i, (i 1) // 2)
uj5u.com熱心網友回復:
代替
k = k 2
說
if (sum <= 100):
k = k 2
...因為那畢竟是你想加2的情況。
還要計算數字,請使用另一個計數器 perhasp howManyNumbers,它以 0 開頭,每次添加數字時都會添加 1。
uj5u.com熱心網友回復:
只需簡單地將您的代碼更改為,
n = int()
sum = 0
k = 1
cnt = 0
while sum <= 100:
if k%2==1:
sum = sum k
k = k 2
cnt =1
print('Sum is:', sum)
print("last number:", k-2)
print('Number of Numbers Added:', cnt)
這就是原因,計數器應該從 0 開始,最后列印的數字的答案應該是 k-2,因為當總和超過 100 時,它也會將 k 的值增加 2,然后回圈將是陷入虛假狀態。
uj5u.com熱心網友回復:
您甚至可以針對一般情況解決它:
def sum_n(n, k=3, s =1):
if s k > n:
print('Sum is', s k)
print('Last number', k)
return
sum_n(n, k 2, s k)
sum_n(int(input()))
uj5u.com熱心網友回復:
您可以執行以下操作:
from itertools import count
total = 0
for i, num in enumerate(count(1, step=2)):
total = num
if total > 100:
break
print('Sum is:', total)
print("last number:", 2*i 1)
為避免更新k,您還可以使用以下習語
while True:
total = k # do not shadow built-in sum
if total > 100:
break
或者在 Python >= 3.8 中:
while (total := total k) <= 100:
k = 2
uj5u.com熱心網友回復:
根據您的代碼,這將實作您的目標:
n = 0
summed = 0
k = 1
while summed <= 100:
n = 1
summed = summed k
if summed <= 100:
k = k 2
print(f"Sum is: {summed}")
print(f"Last number: {k}")
print(f"Loop count: {n}")
uj5u.com熱心網友回復:
這將解決您的問題,而無需過多更改您的代碼:
n = int()
counter_sum = 0
counter = 0
k = 1
while counter_sum <= 100:
k = 2
counter_sum =counter_sum k
counter =1
print('Sum is:', counter_sum)
print("last number:", k)
print("number of numbers added:", counter)
uj5u.com熱心網友回復:
您不需要為此回圈。1...n步長的總和k由下式給出
s = ((n - 1) / k 1) * (n 1) / k
您可以將其簡化為標準二次方
s = (n**2 - k * n k - 1) / k**2
要找到 的整數解s >= x,求解s = x并取結果的上限。將二次公式應用到
n**2 - k * n k - 1 = k**2 * x
結果是
n = 0.5 * (k sqrt(k**2 - 4 * (k - k**2 * x - 1)))
對于k = 2,x = 100你得到:
>>> from math import ceil, sqrt
>>> k = 2
>>> x = 100
>>> n = 0.5 * (k sqrt(k**2 - 4 * (k - k**2 * x - 1)))
>>> ceil(n)
21
當你得到時n == ceil(n),唯一的并發癥出現了,因為你真的想要s > x。在這種情況下,您可以測驗:
c = ceil(n)
if n == c:
c = 1
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/362050.html
