看板 C_and_CPP 關於我們 聯絡資訊
初學者的一個問題,在1~49個數當中亂數選取且可以重複,選出來的值總和不能超過 360 小弟我卻只能寫出產生49個亂數且每個數字不會超過360,但就是不知道該怎麼寫出 列出幾個亂數然後計算總和不會超過360 下面是我寫的程式碼,或許有些地方有些錯誤,也煩請指教一番,謝謝:D 有大大說我解釋的不清楚,那我舉例子看看是否會比較清楚: 譬如說... 第一次亂數產生5個數字: 100,50,25,75,22 這五個數字不超過360 第二次亂數產生7個數字: 150,88,17,39,11,12,77,1 這七個數字不超過360 大致結果是這樣子的,小弟我卡在不懂該如何寫出上述的這些結果Orz #include <stdio.h> #include <stdlib.h> #include <time.h> void Rand_MS(void) { int MS[49], i; srand(time(NULL)); for(i=1;i<50;i++) MS[i]=rand()%360+1; for(i=1;i<50;i++){ printf("%d\n",MS[i]); } } int main(void) { Rand_MS(); return 0; } -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 125.224.176.46
james732:直覺方式:算出總和,如果超過360就整個重來 10/20 00:06
james732:這種方式在很倒楣的情況下會跑很久 XDDD 10/20 00:06
QQ29:反過來想呢? 用360-rand() 然後剩下最後一個就拿 剩下的值 10/20 00:19
snowlike:360切48刀如何,其實題目的條件不清不楚的 10/20 00:21
james732:總共要拿幾個數來加啊?這個問題應該挺重要的...?? 10/20 00:25
※ 編輯: NGboy 來自: 125.224.176.46 (10/20 00:33)
james732:我的問題:總共要加總幾個數字呢?還是說不管幾個,就是 10/20 00:36
james732:不能超過360就對了呢? 10/20 00:36
VictorTom:推題目不清不楚, 1~49個數??是從1~49取數, 還是有已知的 10/20 00:40
VictorTom:數列有49個已知的數要去取??還是不管怎樣就是要取49個亂 10/20 00:41
VictorTom:數出來使其合小於360??(最後這個不限定亂數範圍很難取) 10/20 00:42
QQ29:你現在題目還是很怪 取幾個? 49個數字是已經知道的? 10/20 00:42
QQ29:如果是初學者 搞不好題目就只是簡單要你亂數幾個數不要爆掉 10/20 00:43
QQ29:印出XD 10/20 00:43
VictorTom:看了例子之後更不懂Orz 10/20 00:44
NGboy:james大大 加總幾個數字不重要 重點在於和不超過360 10/20 00:47
NGboy:1~49個數字去取出 取出幾個都沒關係 總和不超過360為前提 10/20 00:48
QQ29:1~49已經知道? 10/20 00:51
VictorTom:那就跑個迴圈從1~49, 然後取亂數?~360之間, 每次取完就 10/20 00:51
VictorTom:和之前的總和累加, 只要爆了就捨棄最後一個數並把結果輸 10/20 00:51
VictorTom:出, 大概就是這樣吧?? 10/20 00:52
NGboy:嗯嗯 謝謝Tom大 這方法好像也可以!! 感恩:D 10/20 00:52
VictorTom:剛想了一下, 因為不知道包不包含0可以取, 可以取的話不 10/20 00:53
VictorTom:要等爆了再一次輸出, 改成只要沒爆就把目前取的數印出來 10/20 00:53
VictorTom:吧; 如果最小是1, 那開一個[360]的array就夠存結果了:) 10/20 00:54
NGboy:喔~原來可以這麼寫 再次謝謝Tom大 10/20 00:56
VictorTom:對不起, 我後來想起來只要取1~49個數就好, 所以開[49] 10/20 01:08
VictorTom:的array來放就應該夠的; 果然年紀大了應該早點睡....Orz 10/20 01:09
FoxQ:無關程式 第二個例子的合是395耶XD 10/21 20:49