[問題] 怎麼讓0不要出現!!

看板C_and_CPP (C/C++)作者 (小噗子)時間16年前 (2009/10/15 23:01), 編輯推噓12(12046)
留言58則, 9人參與, 最新討論串1/1
這次老師給個問題 怎麼讓以下跑出來的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

10/15 23:04, , 1F
作業要自己寫喔! 乖
10/15 23:04, 1F

10/15 23:05, , 2F
X是不是還有其他限制阿 要不然直接+1就好 餘數不會-1
10/15 23:05, 2F

10/15 23:13, , 3F
我想了1天多了,真的想不到就來這p文了..
10/15 23:13, 3F

10/15 23:14, , 4F
我打出這個 if (X= =0 )X=1; 可是老師說不是
10/15 23:14, 4F

10/15 23:15, , 5F
是說要把0不要出現.那樣打只是0變1但是如果出現1那個這個1
10/15 23:15, 5F

10/15 23:15, , 6F
那個這個1是0還是1不知道!!所以他說要0不要出現
10/15 23:15, 6F

10/15 23:17, , 7F
我是說x直接加1 不用if了
10/15 23:17, 7F

10/15 23:18, , 8F
你可以改printf出來的東西阿 又沒說一定要改X內容
10/15 23:18, 8F

10/15 23:18, , 9F
怎麼看起來好熟悉... 你是帥太的嗎= =
10/15 23:18, 9F

10/15 23:27, , 10F
帥太?? 不清楚ㄟ!!
10/15 23:27, 10F

10/15 23:34, , 11F
首先你要知道rand()這個函數的作用, 它會回傳0~[某數]
10/15 23:34, 11F

10/15 23:34, , 12F
回來, 所以你rand()%50, 值域會在0~N, N的值嘛, 提示你
10/15 23:34, 12F

10/15 23:35, , 13F
%是取餘數; OK, 那你現在知道0從哪裡來的了, 就知道怎
10/15 23:35, 13F

10/15 23:36, , 14F
樣弄掉它, 只是我不是很懂你們老師想幹麻, 所以我也只
10/15 23:36, 14F

10/15 23:36, , 15F
能提示到這裡@_@"
10/15 23:36, 15F

10/15 23:36, , 16F
話說, 你的題目原本是否應該是產生A~B之間的亂數啊??
10/15 23:36, 16F

10/15 23:41, , 17F
他是說做樂透阿就出現隨機6個字組..但是會出現0
10/15 23:41, 17F

10/15 23:42, , 18F
他就說要吧0用掉..那要怎麼用掉!!這樣說就叫我們回去做..
10/15 23:42, 18F

10/15 23:43, , 19F
那要怎麼寫 = = 腦袋當機中!!要瘋了..
10/15 23:43, 19F

10/15 23:47, , 20F
z-3-7-16
10/15 23:47, 20F

10/15 23:47, , 21F
rand()%50 產生的是0~49的亂數
10/15 23:47, 21F

10/15 23:48, , 22F
你要出1~50的話,就看你要全部+1,還是0變成50 都可以呀
10/15 23:48, 22F

10/15 23:49, , 23F
如果是要出1~49的話,自己想
10/15 23:49, 23F

10/15 23:53, , 24F
可他這樣不是就跟 0變1 一樣道理嗎? 他好像不是要這樣的..
10/15 23:53, 24F

10/16 00:05, , 25F
不一樣呀 0變1 這樣1出現的機率跟2就不一樣了
10/16 00:05, 25F

10/16 00:05, , 26F
我想你們老師的意思是希望產生的亂數裡就沒有0出現, 簡
10/16 00:05, 26F

10/16 00:05, , 27F
單說.........被樓上先說了....Orz
10/16 00:05, 27F

10/16 00:06, , 28F
0變1,1還是1 這樣開出1的機率是其他號碼的二倍
10/16 00:06, 28F

10/16 00:08, , 29F
喔喔..因該是這樣吧v大..全部+1 是在50後面+1嗎?
10/16 00:08, 29F

10/16 00:13, , 30F
順便問一下 樂透是1到42不是? 還是改了?
10/16 00:13, 30F

10/16 00:26, , 31F
大樂透不是到49嗎???
10/16 00:26, 31F

10/16 00:28, , 32F
呵呵~~這就是原po你要搞清楚的問題啦:) 假如只要到49好
10/16 00:28, 32F

10/16 00:28, , 33F
了, 你都+1以後就會生出1~50了, 那麼你又要怎麼辦呢??
10/16 00:28, 33F

10/16 00:28, , 34F
想想看吧應該不難的:)
10/16 00:28, 34F

10/16 00:30, , 35F
rand後如果出現0 再重新rand一次 這樣應該可以吧
10/16 00:30, 35F

10/16 00:32, , 36F
樓上這也是一個方法:) 不過可以寫出只產生需要的range內
10/16 00:32, 36F

10/16 00:33, , 37F
的數字, 會比較有效率吧XD
10/16 00:33, 37F

10/16 00:34, , 38F
那吧50改成48 這樣全部+1 不就是 1~49了 對吧!!
10/16 00:34, 38F

10/16 00:35, , 39F
49
10/16 00:35, 39F

10/16 00:37, , 40F
為什麼是49 49+1不就是50了!! 樂透裡面不是到49嗎?
10/16 00:37, 40F

10/16 00:39, , 41F
是 mod 49 , 輸出的值會在 0 ~ 48 之間
10/16 00:39, 41F

10/16 00:40, , 42F
科科科, 你試試看就知道為什麼了, 再提示你, 想一想 %
10/16 00:40, 42F

10/16 00:40, , 43F
........又被樓上講完了....Orz
10/16 00:40, 43F

10/16 00:40, , 44F
好像講太多了...
10/16 00:40, 44F

10/16 00:41, , 45F
嗚嗚~~人家今天一直被破梗....Q_Q~
10/16 00:41, 45F

10/16 00:47, , 46F
那這樣寫可以嗎? X=rand()%49+1; >o<"
10/16 00:47, 46F

10/16 01:15, , 47F
推算一下值域就知道這樣寫是OK的啦:)
10/16 01:15, 47F

10/16 01:15, , 48F
順便提醒你, 如果這個題目是產生六個亂數, 那到這一步可
10/16 01:15, 48F

10/16 01:16, , 49F
能可以收工了; 如果是樂透開獎/或電腦選號程式, 那你的
10/16 01:16, 49F

10/16 01:16, , 50F
作業可能還有一半的路要走喔:)
10/16 01:16, 50F

10/16 01:19, , 51F
我試了一下這樣沒有0出現..所以這樣也行摟?
10/16 01:19, 51F

10/16 01:20, , 52F
他還沒叫我們寫樂透..目前叫我們0不要出現..我這樣ok了嗎?
10/16 01:20, 52F

10/16 01:20, , 53F
還有一種方法,想像你是開獎機,塞入49個獎球
10/16 01:20, 53F

10/16 01:21, , 54F
隨機pop一個球出來.連續pop幾次就是大樂透啦
10/16 01:21, 54F

10/16 01:21, , 55F
用C++的vector 很容易實作
10/16 01:21, 55F

10/16 01:22, , 56F
如果還不是樂透, 那看起來可以結案了, 弄清楚題目就好:)
10/16 01:22, 56F

10/16 01:23, , 57F
恩.. 那就結束拉 原來+1 這樣就好了!!我真笨!!
10/16 01:23, 57F

10/16 01:24, , 58F
謝謝 各位版大們指點.. 謝謝!!
10/16 01:24, 58F
文章代碼(AID): #1Arpb4go (C_and_CPP)
文章代碼(AID): #1Arpb4go (C_and_CPP)