看板 C_and_CPP 關於我們 聯絡資訊
各位大大好 小弟是第一次在C版發文 因為我有修資料結構 而我們老師有出個題目 是說用副程式寫出C的排列組合 意思是C的(m,n) m在上n在下會等於 m階/{n階*(m-n)階} 然後要用副程式寫 #include <stdio.h> #include <stdlib.h> long int factor(int p); /* 函式宣告*/ long int factor(int p) /* 函式定義*/ { ------------------------- } void main(void) { ------xxx= factor(int p) /* 呼叫函式*/ } 而我的寫法是 #include <stdio.h> #include <stdlib.h> int factor(a,b) { a=1,b; while(a>=1) { b*=a; a--; } return b; } void main(void) { int m,n; printf("請輸入排列組合C(m,n)的值\n"); printf("m="); scanf("%d",&m); printf("n="); scanf("%d",&n); printf("C(%d,%d)=%d\n",m,n,(factor(m,m)/(factor(n,n)*factor(m-n,m-n)))); system("pause"); return(0); } 輸入m=10 n=8 答案應該是45 可是我的都是0 請問我的寫法錯在哪 而且老實說 我的程式(factor(m,m)/(factor(n,n)*factor(m-n,m-n)不是很懂 為何C(m,n)的意思我懂 那factor(m,m)這樣的意思是? 這是我抄同學的(他也是抄別人的所以也不是很懂) 而我們班有修資料結構的不多 我又是身障生比較內向不敢問其他人 請問有大大能幫我解答嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.25.118.145
loveme00835: factor 內 b 沒有給適當的初始值 09/30 22:24
loveme00835:看錯, 請忽略一樓...Orz 09/30 22:24
purpose:歡迎這位新同學,呀比。 建議:標題簡短描述內文,比如 09/30 22:27
purpose:『C(m,n) 排列組合的計算寫不出來』,再來,不要抄別人的 09/30 22:27
ericinttu:可以試試每次呼叫 factor()時, 把傳入變數數值顯示出來 09/30 22:28
purpose:程式碼,全部自己寫,會寫多少就貼多少出來,然後說清楚你 09/30 22:28
purpose:哪些不懂,大家就會回你。 09/30 22:28
idicivik:factor 指的是階乘 所以只需要一個輸入即可 n! = 1*..*n 09/30 22:29
povertytrap:謝謝樓上得大大 可是可能小弟我比較笨.... 09/30 22:31
povertytrap:四樓大大的意思我還是不懂..... 09/30 22:31
stupid0319:抄也要找對的人抄吧...... 09/30 22:31
povertytrap:說錯是五樓 09/30 22:31
james732:五樓講的就是在 factor 加個 printf("%d, %d\n", a, b); 09/30 22:32
povertytrap:喔喔 那竟然factor指的是階 為甚麼要(m,m)呢? 09/30 22:33
stupid0319:int factor(a,b) <<這樣也能編的過?? 09/30 22:34
james732:我也很好奇,這個程式毛病還真不少... 09/30 22:34
povertytrap:請問有錯嗎.......? 09/30 22:35
james732:void main() {... return 0; } 這樣也行? 09/30 22:35
povertytrap:那個是題目= =應該是老師打錯 09/30 22:36
stupid0319:int factor(int a) { return a*(a==1?1:factor(a-1))} 09/30 22:37
povertytrap:應該是 int main(void)對吧 09/30 22:37
povertytrap:樓上的大大意思是= =? 09/30 22:38
james732:為什麼題目的 factor 只有 (int p) 09/30 22:39
james732:但你的 factor 卻變成 (a, b) 兩個數字? 09/30 22:39
povertytrap:我不知道耶我已經從投影片複製貼上了 09/30 22:39
james732:請思考清楚吧 09/30 22:40
povertytrap:因為我的a其實是multiplier b就是product 09/30 22:41
povertytrap:是利用product *= multiplier;下一行 multiplier--; 09/30 22:42
james732:factor應該這樣就夠了 http://nopaste.csie.org/f71c5 09/30 22:46
idicivik:那請將 a=1,b; 這行拿掉 然後b的相對位置的input改為 1 09/30 22:46
idicivik:然後把 factor 的 function prototype改成輸入兩個int 吧 09/30 22:47
povertytrap:我大概懂了 謝謝各位大大 可是想請問 為何(m,m)? 09/30 22:49
james732:你應該還沒懂,因為 (m, m) 是錯誤的寫法 09/30 22:49
purpose:>>factor(a,b)<<這樣也能編的過?? http://ppt.cc/-xL5 09/30 22:50
povertytrap:真的跑得過阿.........答案都對 可是如果是錯的 09/30 22:51
james732:直接給答案吧 http://nopaste.csie.org/fcc76 09/30 22:51
povertytrap:那該怎麼表達 難道就刪掉嗎? 09/30 22:51
loveme00835:也不是說錯不錯啦, 只是介面設計成這樣很多餘...邏輯 09/30 22:51
loveme00835:上更容易混淆 09/30 22:51
james732:樓上說的對,你要寫成(m,m)嚴格不能說錯,但沒必要 09/30 22:52
povertytrap:喔喔 謝謝 是聽身障學長說有這個版 謝謝大家 我會了 09/30 22:53
povertytrap:看了J大的答案 謝謝 09/30 22:53
james732:建議你再仔細看看老師給的題目跟你的程式... 09/30 22:54
purpose:能得到解答不是重點,解題的過程腳踏實地,搞懂每個地方 09/30 22:56
purpose:才是正道。當然如果你只是想要學分,不是真心要學習就... 09/30 22:56
povertytrap:我一定要學!!因為我只能走程是這條路 09/30 23:00
james732:那就跟你說聲加油囉 :) 09/30 23:07
stupid0319:試貼看看http://nopaste.csie.org/96e18 10/01 00:18
HolyXie:想法沒錯 可是你的邏輯錯了 m=10 n=8 你自己帶進去跑跑看 10/01 00:21
HolyXie:因為a--使得你的迴圈只有跑一次 10/01 00:22
ddfg:樓上說的沒錯,只是factor沒發揮到它的階層功能罷了。 10/01 02:45