看板 C_and_CPP 關於我們 聯絡資訊
這次老師給個問題 怎麼讓以下跑出來的6個數裡 不出現0.. if (X= =0 )X=1; 不是這個.. 要讓0不要出現.. 以下是我打的但是要加什麼進去 才不要讓0出現!! 請各位版大幫我解謎.. #include <stdio.h> #include <stdlib.h> #include <math.h> main() { int X,i; srand(time(0)+getpid()); for (i=0;i<6;i++){ X=rand()%50; printf("%dth:X=%d\n",i+1,X); } system("pause"); } 謝謝!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.39.53.37
dendrobium:作業要自己寫喔! 乖 10/15 23:04
aleelyle:X是不是還有其他限制阿 要不然直接+1就好 餘數不會-1 10/15 23:05
bin0622:我想了1天多了,真的想不到就來這p文了.. 10/15 23:13
bin0622:我打出這個 if (X= =0 )X=1; 可是老師說不是 10/15 23:14
bin0622:是說要把0不要出現.那樣打只是0變1但是如果出現1那個這個1 10/15 23:15
bin0622:那個這個1是0還是1不知道!!所以他說要0不要出現 10/15 23:15
aleelyle:我是說x直接加1 不用if了 10/15 23:17
elfkiller:你可以改printf出來的東西阿 又沒說一定要改X內容 10/15 23:18
ducksteven:怎麼看起來好熟悉... 你是帥太的嗎= = 10/15 23:18
bin0622:帥太?? 不清楚ㄟ!! 10/15 23:27
VictorTom:首先你要知道rand()這個函數的作用, 它會回傳0~[某數] 10/15 23:34
VictorTom:回來, 所以你rand()%50, 值域會在0~N, N的值嘛, 提示你 10/15 23:34
VictorTom:%是取餘數; OK, 那你現在知道0從哪裡來的了, 就知道怎 10/15 23:35
VictorTom:樣弄掉它, 只是我不是很懂你們老師想幹麻, 所以我也只 10/15 23:36
VictorTom:能提示到這裡@_@" 10/15 23:36
VictorTom:話說, 你的題目原本是否應該是產生A~B之間的亂數啊?? 10/15 23:36
bin0622:他是說做樂透阿就出現隨機6個字組..但是會出現0 10/15 23:41
bin0622:他就說要吧0用掉..那要怎麼用掉!!這樣說就叫我們回去做.. 10/15 23:42
bin0622:那要怎麼寫 = = 腦袋當機中!!要瘋了.. 10/15 23:43
elfkiller:z-3-7-16 10/15 23:47
mantour:rand()%50 產生的是0~49的亂數 10/15 23:47
mantour:你要出1~50的話,就看你要全部+1,還是0變成50 都可以呀 10/15 23:48
mantour:如果是要出1~49的話,自己想 10/15 23:49
bin0622:可他這樣不是就跟 0變1 一樣道理嗎? 他好像不是要這樣的.. 10/15 23:53
mantour:不一樣呀 0變1 這樣1出現的機率跟2就不一樣了 10/16 00:05
VictorTom:我想你們老師的意思是希望產生的亂數裡就沒有0出現, 簡 10/16 00:05
VictorTom:單說.........被樓上先說了....Orz 10/16 00:05
mantour:0變1,1還是1 這樣開出1的機率是其他號碼的二倍 10/16 00:06
bin0622:喔喔..因該是這樣吧v大..全部+1 是在50後面+1嗎? 10/16 00:08
elfkiller:順便問一下 樂透是1到42不是? 還是改了? 10/16 00:13
bin0622:大樂透不是到49嗎??? 10/16 00:26
VictorTom:呵呵~~這就是原po你要搞清楚的問題啦:) 假如只要到49好 10/16 00:28
VictorTom:了, 你都+1以後就會生出1~50了, 那麼你又要怎麼辦呢?? 10/16 00:28
VictorTom:想想看吧應該不難的:) 10/16 00:28
ioioioioioio:rand後如果出現0 再重新rand一次 這樣應該可以吧 10/16 00:30
VictorTom:樓上這也是一個方法:) 不過可以寫出只產生需要的range內 10/16 00:32
VictorTom:的數字, 會比較有效率吧XD 10/16 00:33
bin0622:那吧50改成48 這樣全部+1 不就是 1~49了 對吧!! 10/16 00:34
dendrobium: 49 10/16 00:35
bin0622:為什麼是49 49+1不就是50了!! 樂透裡面不是到49嗎? 10/16 00:37
dendrobium:是 mod 49 , 輸出的值會在 0 ~ 48 之間 10/16 00:39
VictorTom:科科科, 你試試看就知道為什麼了, 再提示你, 想一想 % 10/16 00:40
VictorTom:........又被樓上講完了....Orz 10/16 00:40
dendrobium:好像講太多了... 10/16 00:40
VictorTom:嗚嗚~~人家今天一直被破梗....Q_Q~ 10/16 00:41
bin0622:那這樣寫可以嗎? X=rand()%49+1; >o<" 10/16 00:47
VictorTom:推算一下值域就知道這樣寫是OK的啦:) 10/16 01:15
VictorTom:順便提醒你, 如果這個題目是產生六個亂數, 那到這一步可 10/16 01:15
VictorTom:能可以收工了; 如果是樂透開獎/或電腦選號程式, 那你的 10/16 01:16
VictorTom:作業可能還有一半的路要走喔:) 10/16 01:16
bin0622:我試了一下這樣沒有0出現..所以這樣也行摟? 10/16 01:19
bin0622:他還沒叫我們寫樂透..目前叫我們0不要出現..我這樣ok了嗎? 10/16 01:20
sandr1983:還有一種方法,想像你是開獎機,塞入49個獎球 10/16 01:20
sandr1983:隨機pop一個球出來.連續pop幾次就是大樂透啦 10/16 01:21
sandr1983:用C++的vector 很容易實作 10/16 01:21
VictorTom:如果還不是樂透, 那看起來可以結案了, 弄清楚題目就好:) 10/16 01:22
bin0622:恩.. 那就結束拉 原來+1 這樣就好了!!我真笨!! 10/16 01:23
bin0622:謝謝 各位版大們指點.. 謝謝!! 10/16 01:24