看板 Math 關於我們 聯絡資訊
※ 引述《jenshi (小旭)》之銘言: : [img]https://upload.cc/i1/2023/03/22/2tbLZg.jpg[/img] : 有觀察到x座標和y座標都是1-2+3-4... : 但不知道哪時候會到A2022 可以觀察到 A1(0,0)會先往右一步再往上一步到達A3(1,1) 然後往左2步再往下2步到達A7(-1,-1) 然後往右3步再往上3步到達A13(2,2) 然後往左4步在往下4步到達A21(-2,-2) 這個過程發現走完完整n步,會到達第1+1*2+2*2+...+n*2=1+n(n+1)/2*2= 1+n(n+1)個點 然後n為奇數會是往右n步再往上步,且第A 個點的座標為((n+1)/2,(n+1)/2) 1+n(n+1) n為偶數會是往左n步再往下n步,且第A 個點的座標為(-n/2,-n/2) 1+n(n+1) 2 所以目標就是找出最大正整數n,使得 1+n(n+1)≦2022 => n < n(n+1)≦2021 2 2 然後45 = (40+5) = 1600+400+25=2025 => n = 44 2 =>1+44*45=1+(45-1)*45=1+45 -45 = 1+2025-45 = 1981 => A = (-22,-22) 1981 2022-1981 = 41 < 45 所以接下來會從A 往右走41步到A 1981 2022 ∴A = (-22+41,-22) = (19,-22) 2022 這應該是比較系統化的想法了 PS1: https://www.ptt.cc/bbs/Math/M.1644422554.A.155.html 應該跟這個是相似的 PS2: python實作如下: from math import sqrt if __name__ == '__main__': n = int(input('Enter n: ')) # 1+k(k+1) <= n, k^2+k-(n-1) = 0 => largest k = int([-1+sqrt(1+4(n-1))]/2) = int([-1+sqrt(4n-3)]/2) k = int((-1+sqrt(4*n-3))/2) if k % 2 == 0: An = [int(-k/2), int(-k/2)] diff = n-(1+k*(k+1)) if diff < k+1: An[0] += diff else: An[0] += k+1 An[1] += diff-(k+1) else: An = [int((k+1)/2), int((k+1)/2)] diff = n-(1+k*(k+1)) if diff < k+1: An[0] -= diff else: An[0] -= k+1 An[1] -= diff-(k+1) print('A{0}=({1}, {2})'.format(n, An[0], An[1])) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.47.71.132 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/Math/M.1679503356.A.51C.html ※ 編輯: yueayase (114.47.71.132 臺灣), 03/23/2023 00:43:49 ※ 編輯: yueayase (114.47.71.132 臺灣), 03/23/2023 00:48:50 ※ 編輯: yueayase (114.47.71.132 臺灣), 03/23/2023 01:16:13
jenshi : 感謝老師詳細的說明 03/23 07:10