Re: [問題] 求gcd和lcm

看板C_and_CPP作者 (--???--)時間14年前 (2009/11/08 12:14), 編輯推噓2(204)
留言6則, 3人參與, 最新討論串3/4 (看更多)
※ 引述《keler897 (職業洗的)》之銘言: : int gcd(int a,int b,int c) : { : int d; : for(d=a;a%d==0&&b%d==0&&c%d==0;d--) : return d; : } 先看一下這段程式碼 for迴圈的結構:for(初始值;結束條件;變數更新) 結束條件那邊通常會放一個邏輯判斷句 (如原PO寫的 a%d==0&&b%d==0&&c%d==0 ) 當這個判斷句的條件成立時,迴圈會繼續跑;條件不成立時迴圈會中止 for(d=a;a%d==0&&b%d==0&&c%d==0;d--) 這樣寫的話,這段程式碼會做的事是: (1)初始化變數d的值,讓它與a相等 (2)判斷 a%d b%d c%d 三個值是不是都等於0。 (3)如果a%d b%d c%d都等於0,則d的值減1,然後回到步驟(2) 如果不是,則跳出迴圈(d的值不變) 這樣剛好和原PO想要做的事相反 另外 for(d=a;a%d==0&&b%d==0&&c%d==0;d--) return d; return d;直接接在for迴圈的後面,則"return d;"也會被當成for迴圈裡面的一部份 如果for迴圈裡面沒有要做其他的事的話,後面要加個分號 for(d=a;a%d==0&&b%d==0&&c%d==0;d--); for(d=a;a%d==0&&b%d==0&&c%d==0;d--) ; 這兩種種寫法都可以 (我個人偏好後者,比較不容易漏看分號) -- ∫work dt = success -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.230.238.124

11/08 12:35, , 1F
感謝大大這麼詳細的回答 我了解了!!!
11/08 12:35, 1F

11/08 14:59, , 2F
其實for中間那個嚴格來說是"繼續跑迴圈的條件", 另外,
11/08 14:59, 2F

11/08 14:59, , 3F
就算是第一輪要跑也會check那個條件, 所以以下這個例子
11/08 14:59, 3F

11/08 14:59, , 4F
for(i=1;i<1;++i); 這個for一次都不會跑....
11/08 14:59, 4F

11/08 15:00, , 5F
11/08 15:00, 5F

11/08 15:00, , 6F
斷太慢了 Orz
11/08 15:00, 6F
文章代碼(AID): #1AzaMk38 (C_and_CPP)
討論串 (同標題文章)
文章代碼(AID): #1AzaMk38 (C_and_CPP)