[問題] C語法的亂數問題

看板C_and_CPP (C/C++)作者 (今天我NG了)時間16年前 (2009/10/20 00:04), 編輯推噓9(9019)
留言28則, 6人參與, 最新討論串1/3 (看更多)
初學者的一個問題,在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

10/20 00:06, , 1F
直覺方式:算出總和,如果超過360就整個重來
10/20 00:06, 1F

10/20 00:06, , 2F
這種方式在很倒楣的情況下會跑很久 XDDD
10/20 00:06, 2F

10/20 00:19, , 3F
反過來想呢? 用360-rand() 然後剩下最後一個就拿 剩下的值
10/20 00:19, 3F

10/20 00:21, , 4F
360切48刀如何,其實題目的條件不清不楚的
10/20 00:21, 4F

10/20 00:25, , 5F
總共要拿幾個數來加啊?這個問題應該挺重要的...??
10/20 00:25, 5F
※ 編輯: NGboy 來自: 125.224.176.46 (10/20 00:33)

10/20 00:36, , 6F
我的問題:總共要加總幾個數字呢?還是說不管幾個,就是
10/20 00:36, 6F

10/20 00:36, , 7F
不能超過360就對了呢?
10/20 00:36, 7F

10/20 00:40, , 8F
推題目不清不楚, 1~49個數??是從1~49取數, 還是有已知的
10/20 00:40, 8F

10/20 00:41, , 9F
數列有49個已知的數要去取??還是不管怎樣就是要取49個亂
10/20 00:41, 9F

10/20 00:42, , 10F
數出來使其合小於360??(最後這個不限定亂數範圍很難取)
10/20 00:42, 10F

10/20 00:42, , 11F
你現在題目還是很怪 取幾個? 49個數字是已經知道的?
10/20 00:42, 11F

10/20 00:43, , 12F
如果是初學者 搞不好題目就只是簡單要你亂數幾個數不要爆掉
10/20 00:43, 12F

10/20 00:43, , 13F
印出XD
10/20 00:43, 13F

10/20 00:44, , 14F
看了例子之後更不懂Orz
10/20 00:44, 14F

10/20 00:47, , 15F
james大大 加總幾個數字不重要 重點在於和不超過360
10/20 00:47, 15F

10/20 00:48, , 16F
1~49個數字去取出 取出幾個都沒關係 總和不超過360為前提
10/20 00:48, 16F

10/20 00:51, , 17F
1~49已經知道?
10/20 00:51, 17F

10/20 00:51, , 18F
那就跑個迴圈從1~49, 然後取亂數?~360之間, 每次取完就
10/20 00:51, 18F

10/20 00:51, , 19F
和之前的總和累加, 只要爆了就捨棄最後一個數並把結果輸
10/20 00:51, 19F

10/20 00:52, , 20F
出, 大概就是這樣吧??
10/20 00:52, 20F

10/20 00:52, , 21F
嗯嗯 謝謝Tom大 這方法好像也可以!! 感恩:D
10/20 00:52, 21F

10/20 00:53, , 22F
剛想了一下, 因為不知道包不包含0可以取, 可以取的話不
10/20 00:53, 22F

10/20 00:53, , 23F
要等爆了再一次輸出, 改成只要沒爆就把目前取的數印出來
10/20 00:53, 23F

10/20 00:54, , 24F
吧; 如果最小是1, 那開一個[360]的array就夠存結果了:)
10/20 00:54, 24F

10/20 00:56, , 25F
喔~原來可以這麼寫 再次謝謝Tom大
10/20 00:56, 25F

10/20 01:08, , 26F
對不起, 我後來想起來只要取1~49個數就好, 所以開[49]
10/20 01:08, 26F

10/20 01:09, , 27F
的array來放就應該夠的; 果然年紀大了應該早點睡....Orz
10/20 01:09, 27F

10/21 20:49, , 28F
無關程式 第二個例子的合是395耶XD
10/21 20:49, 28F
文章代碼(AID): #1At8uEsN (C_and_CPP)
文章代碼(AID): #1At8uEsN (C_and_CPP)