作者bleed1979 (十三)
看板C_and_CPP
標題Re: [語法] 自己寫的計算Cn取m 在奇怪的地方會出錯
時間Sat Nov 7 22:01:09 2009
※ 引述《tw00088437 (喵貓 loves fish)》之銘言:
: long long CNM(int e,int f)
: {
: if(f<=e/2)
: {
: if(f==0)
: return 1;
: else
: {
: int x=e-f+1;
: meowth(&x,&f);
: return (CNM(e,f-1)/f*x);
: }
: }
: else
: {
: if(f==e)
: return 1;
: else
: {
: int y=f+1;
: int z=e-f;
: meowth(&y,&z);
: return (CNM(e,f+1)/z*y);
: }
: }
: }
抱歉,C(5,3)是對的,不過C(5,2)會有問題
C(5,2)
e=5,f=2
x=4,f=2 => x=2,f=1
C(5,0)/1*2
=>1/1*2=2
^^^
應該要是5才對
else
{
int x=e-f+1;
int t=f;
meowth(&x,&f);
return (CNM(e,t-1)/f*x);
}
--
World of bleed1979
http://bleed1979.myweb.hinet.net/
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.32.177.97
※ 編輯: bleed1979 來自: 114.32.177.97 (11/07 22:09)
推 tw00088437:發現了!! 原來f被偷偷改過有個地方忘了看到 11/07 22:10
→ tw00088437:非常感謝提醒^^" 11/07 22:11
推 tw00088437:結果現在錯c(80,59)@@ 11/07 22:20
→ bleed1979:應該是爆表了... 11/07 22:53
推 tw00088437:可是題目保證答案不會爆 我的過程應該也不會爆啊..@@ 11/07 23:03
→ VictorTom:答案不會爆, 表示存在一種過程到算出答案都不會爆; 不表 11/08 00:16
→ VictorTom:示"你的作法"不會爆; 這種小地方以前參加校內自己辦的程 11/08 00:17
→ VictorTom:設比賽有遇過; 那次遇到1+3+5+..., 直覺的代了(頭加尾) 11/08 00:19
→ VictorTom:乘總數/2的公式, 然後就爆了; 乖乖跑迴圈加一下就過了XD 11/08 00:20
推 tw00088437:崩潰>< 11/08 00:32
推 walker2009:有乘法的地方都要小心 overflow 11/08 11:57
→ walker2009:有除法的地方都要注意整數除法 11/08 11:57
推 bigpigbigpig:建議用質因數分解,應該不會爆。 11/08 17:07