『壹』 c語言如何產生不重復的隨機數
用一個數組裝隨機數,一個數組表示已經記錄過的隨機數;
比如說隨機0-8,生成一個隨機8位數組且數組內各項不重復;
例:
intarray[8];
intarrayIndex[8]={0,0,0,0,0,0,0,0};
intk=0;
srand(100);
while(k<8){
intq=rand()%8+1;
if(arrayIndex[q-1]==1){
continue;
}
array[k]=q;
arrayIndex[q-1]=1;
k++;
}
(1)C語言隨機數生成的數字唯一擴展閱讀
C語言隨機輸出1~20不重復的隨機數
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
voidmain()
{
inta[20];
inti,j;
srand((int)time(0));
a[0]=rand()%20+1;
for(i=1;i<20;i++)
{
a[i]=rand()%20+1;
for(j=0;j<i;j++)
{
if(a[i]==a[j])
{
i--;
}
}
}
for(i=0;i<20;i++)
{
printf("%3dn",a[i]);
}
}
『貳』 C語言產生唯一隨機數問題,代碼解釋。while(a[m=rand()%100]);
從第一次開始,while(a[50]) a[50]=0時,就是因為它為0了,循環不成立才往下執行,不然a[50]=1就一直在while(a[m=rand()%100]);這里循環了,注意,這里是有分號的,while在這里只作用於這個分號之前,如果條件成立,就一直死循環,不會往下了。
『叄』 在c語言里,為什麼rand()每次生成的數都一樣
rand((unsigned)time(NULL))
你生成的數字一樣,是因為沒有根據它的時間來變化,上面的代碼就可以了.
『肆』 C語言產生隨機數字,結果輸出值都一樣
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//#include<crtdefs.h>
intmain(){
inti;
intnum;
srand((unsignedint)time(NULL));//改成這樣就好了:先用時間初始化隨機種子
for(i=0;i<10;i++){
//time_tt;
num=rand()%100; //生成隨機數
printf("%d ",num);
num>50?printf("你贏了 "):printf("你輸了 "); //0為假,非0為真
}
getchar();
}
『伍』 為什麼我用C語言編寫的一個隨機數生成程序生成的數總是一樣的
你需要設置隨機數種子才能生成不一樣的隨機數
你可以參考下面這個樣例
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
int i,j;
srand((int)time(0));/*設置隨機數種子*/
for(i=0;i<10;i++)
{
j=rand()%100;
printf("%d\n",j);
}
return 0;
}
『陸』 C語言生成隨機數的函數,為什麼循環後隨機數都一樣
srand()函數是初始化隨機數產生器,它產生隨機數種子,說白了就是初始化隨機數。
srand((unsigned)time(0));取的是系統時間,也就是距離1970.1.1午夜有多少秒。而for循環每循環一次時間遠遠小於1秒,這就導致了srand((unsigned)time(0))產生的種子並沒有改變。 那麼,相同的隨機數種子所產生的隨機數肯定是一樣的了。
(6)C語言隨機數生成的數字唯一擴展閱讀:
C語言產生隨機數的方法:
1,在C語言中,rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,可以稱它為種子,為基準以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數。
2,C語言中的隨機函數random,可是random函數並不是ANSI C標准,所以說,random函數不能在gcc,vc等編譯器下編譯通過。
3,rand()會返回一隨機數值,范圍在0至RAND_MAX 間。返回0至RAND_MAX之間的隨機數值,RAND_MAX定義在stdlib.h,(其值至少為32767)我運算的結果是一個不定的數,要看你定義的變數類型,int整形的話就是32767。
4,在調用此函數產生隨機數前,必須先利用srand()設好隨機數種子,如果未設隨機數種子,rand()在調用時會自動設隨機數種子為1。一般用for語句來設置種子的個數。
『柒』 C語言:為什麼每次產生的rand隨機數全都一樣例如第一個是9,後面全都是9
/*
Enter the number of sets: enter q to stop.
5 9
How many sides and how many dice:3
Here are 5 sets of 3 9-sided throws.
25 18 14 13 17
How many sets? Enter q to stop.
q
Press any key to continue
*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
intdiceroll(intnum,intside);//返回骰子產生的數字的總和
intmain(void){
intsets,side,dice;//sets為回合數,side面,dice:骰子個數
inti;//變數初始化
srand((unsigned)time(NULL));//應在main()初始化隨機數種子
printf("Enterthenumberofsets:enterqtostop. ");//set組
while(scanf("%d",&sets)==1&&sets>0){
printf("Howmanysidesandhowmanydice:");
if(scanf("%d%d",&side,&dice)==2){
printf("Hereare%dsetsof%d%d-sidedthrows. ",sets,dice,side);
for(i=0;i<sets;i++)//0-sets個回合
printf("%d",diceroll(side,dice));//列印出返回值
printf(" ");
printf("Howmanysets?Enterqtostop. ");
}
elseprintf("inputside,anddice: ");
}
return0;
}
intdiceroll(intside,intdice){
inti,sum;
for(i=0,sum=0;i<dice;i++)
sum+=rand()%side+1;//產生3個骰子搖出的總和sum
returnsum;//返回3個骰子搖出的總數sum
}
『捌』 c語言中怎樣產生位數一定的隨機數
c語言的獲取隨機數的函數為rand(),
可以獲得一個非負整數的隨機數。要調用rand需要引用頭文件stdlib.h。
要讓隨機數限定在一個范圍,可以採用模除加加法的方式。
要產生隨機數r,
其范圍為
m<=r<=n,可以使用如下公式:
rand()%(n-m+1)+m
其原理為,對於任意數,
0<=rand()%(n-m+1)<=n-m
於是
0+m<=rand()%(n-m+1)+m<=n-m+m
即
m<=rand()%(n-m+1)+m<=n
『玖』 C語言隨機生成數字
for(int
i=0;i<=a長度;i++)
{
a[i]=random(100);/*得到0到100之間的隨機數,具體用法可以查一下隨機函數。相應的隨機函數還有randomize,srand,rand*/
}