看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) Win10 編譯器(Ex: GCC, clang, VC++...)+目標環境(跟開發平台不同的話需列出) Leetcode C++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) None 問題(Question): 目前正在寫Leetcode 399. Evaluate Division 其中我正在計算非直接連接的兩個節點它們的值 else if(eq[idx1][loopVal] == -1.0) { eq[idx1][loopVal] = eq[idx1][loop] * eq[loop][loopVal]; printf("%d %d %d %1.2f %1.2f %1.2f %1.2f\n", idx1, loopVal, loop, eq[idx1][loop], eq[loop][loopVal], eq[idx1][loopVal],eq[idx1][loop]*eq[loop][loopVal]); eq[idx1][loopVal] = eq[idx1][loopVal] < 0? -1.0 : eq[idx1][loopVal]; } 但其中卻發現output出現 0 2 2 1.00 -1.00 1.00 -1.00 倒數兩個浮點數 前面是eq[idx1][loopVal] 後面是eq[idx1][loop]*eq[loop][loopVal] 而我printf上一行就是eq[idx1][loopVal] = eq[idx1][loop] * eq[loop][loopVal]; 明明後面那個顯示他乘出來確實是-1.0 結果放回eq[idx1][loopVal]就變成+1.0了?? 完全理解不能 求解 感謝各位 預期的正確結果(Expected Output): 0 2 2 1.00 -1.00 -1.00 -1.00 錯誤結果(Wrong Output): 0 2 2 1.00 -1.00 1.00 -1.00 https://i.imgur.com/1FXNOLW.png 程式碼(Code):(請善用置底文網頁, 記得排版,禁止使用圖檔) else if(eq[idx1][loopVal] == -1.0) { eq[idx1][loopVal] = eq[idx1][loop] * eq[loop][loopVal]; printf("%d %d %d %1.2f %1.2f %1.2f %1.2f\n", idx1, loopVal, loop, eq[idx1][loop], eq[loop][loopVal], eq[idx1][loopVal],eq[idx1][loop]*eq[loop][loopVal]); eq[idx1][loopVal] = eq[idx1][loopVal] < 0? -1.0 : eq[idx1][loopVal]; } https://pastebin.com/qrg9RE6U -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 220.130.45.59 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1743577567.A.BA6.html
ShinHsin: 看起來是倒數3*倒數4=末項沒錯呀 04/02 18:48
ShinHsin: 1*-1=-1 04/02 18:49
ShinHsin: 變數名稱跟印的項目太多太雜了先印關心的項目就好,或是 04/02 18:50
ShinHsin: 分開幾行印 04/02 18:50
wulouise: 你是倒數4 * 3 =倒數1吧... 04/02 22:35
wulouise: 然後你用改過的變數再算一次乘法印出來不是很奇怪 04/02 22:36
gusion: idx1 ==0 ,loop == loopVal == 2 04/03 01:02
gusion: 所以eq[idx1][loop]和eq[idx1][loopVal]都是eq[0][2] 04/03 01:02
gusion: 因此,這個iteration中,set eq[idx1][loopVal]相當於set 04/03 01:02
gusion: eq[idx1][loop] 04/03 01:02
wulouise: 再次強調,不要在debug log運算 04/05 21:43
LPH66: 簡單說, 你做了 eq[0][2] = eq[0][2] * eq[2][2]; 04/06 02:59
喔喔幹 感謝各位 我懂了 按我code的flow來說 printf出來的前兩個浮點數應該都要是-1.0 但是因為我早就assign新的值 如同G大跟L大所說 所以印出來當然完全跟預期不符 W大也所言甚是 那天真的腦子壞了才會把改過的變數再算一次印出來 感謝各位解惑! ※ 編輯: handofn0xus (220.130.45.59 臺灣), 04/07/2025 10:45:03