當前位置:首頁 » 編程語言 » c語言中生成n個隨機數
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中生成n個隨機數

發布時間: 2022-05-01 09:48:13

A. c語言如何編程產生隨機數

1、首先打開Visual stdio 2019,依次點擊文件,新建,項目新建以一個空白的項目:

B. c語言 數據結構 利用隨機函數產生N個隨機整數,對這些數進行多種方法進行排序

srand(time(NULL)); //產生隨機數
for(i = 0; i < n; i++)
a[i] = rand()%(n - i);

extern void insert(int a[], int x) //插入排序
{
int i;
int n;
int j;
int temp;
n = x;
for(i = 1; i < n; i++)
{
temp = a[i];
j = i - 1;
while(temp < a[j] && j >= 0)
{
a[j + 1] = a[j];
j--;
}
a[j + 1] = temp;
}
}

static void shellsort(int a[], int d, int x)
{
int i;
int j;
int n;
int temp;
n = x;
for(i = d; i < n; i += d)
{
temp = a[i];
j = i - d;
while(a[j] > temp && j >= 0)
{
a[j + d] = a[j];
j -= d;
}
a[j + d] = temp;
}
}
extern void shell(int a[], int x) //希爾排序
{
int n;
int d;
n = x;
d = n / 2;
while(d > 0)
{
shellsort(a, d, n);
d /= 2;
}
}

extern void bubble(int a[], int x) //冒泡排序
{
int ischange;
int i;
int j;
int n;
n = x;
for(i = n - 1; i > 0; i--)
{
ischange = 0;
for(j = 0; j < i; j++)
{
if(a[j + 1] < a[j])
{
a[j + 1] += a[j];
a[j] = a[j + 1] - a[j];
a[j + 1] = a[j + 1] - a[j];

ischange = 1;
}
}
if(0 == ischange)
{
break;
}
}
}

static int partion(int a[], int left, int right)
{
int l;
int r;
int priv;
l = left;
r = right;
priv = a[l];
while(l < r)
{
while(a[r] > priv && r > l)
r--;
if(l < r)
{
a[l++] = a[r];
}
while(a[l] < priv && r > l)
l++;
if(l < r)
{
a[r--] = a[l];
}
}
a[l] = priv;
return l;
}

static void quicksort(int a[], int left, int right)
{
int l;
int r;
int priv;
l = left;
r = right;
if(l < r)
{
priv = partion(a, l, r);
quicksort(a, l, priv - 1);
quicksort(a, priv + 1, r);
}
}
extern void quick(int a[], int n) //快速排序
{
int l;
int r;
l = 0;
r = n - 1;
quicksort(a, l, r);
}

extern void selec(int a[], int x) //選擇排序
{
int i;
int j;
int k;
int n;
n = x;
for(i = 0; i < n; i++)
{
k = i;
for(j = i; j < n; j++)
{
if(a[j] < a[k])
{
k = j;
}
}
if(i != k)
{
a[i] += a[k];
a[k] = a[i] - a[k];
a[i] -= a[k];
}
}
}

static void mergearray(int a[], int first, int mid, int last, int p[])
{
int i;
int j;
int k;
i = first;
j = mid + 1;
k = 0;
while(i <= mid && j <= last)
{
if(a[i] <= a[j])
{
p[k++] = a[i++];
}
else
{
p[k++] = a[j++];
}
}
while(i <= mid)
{
p[k++] = a[i++];
}
while(j <= last)
{
p[k++] = a[j++];
}

for(i = 0; i < k; i++)
{
a[first + i] = p[i];
}
}

static void mergesort(int a[], int first, int last, int p[])
{
int mid;
if(last > first)
{
mid = first + (last - first) / 2;
mergesort(a, first, mid, p);
mergesort(a, mid + 1, last, p);
mergearray(a, first, mid, last, p);
}
}

extern void merge(int a[], int n) 歸並排序
{
int *p;
p = (int *)malloc(n * sizeof(int));
if(!p)
{
perror("malloc");
exit(-1);
}
mergesort(a, 0, n - 1, p);
free(p);
}

static void swap(int data[], int a, int b)
{
data[a] ^= data[b];
data[b] ^= data[a];
data[a] ^= data[b];
}

static void siftup(int data[], int n) // create heap
{
int i;
int p;
for(i = n; i > 1 && data[p = i / 2] > data[i]; i = p)
swap(data, p, i);
}

static void siftdown(int data[], int n) // adjust heap
{
int i;
int c;
i = 1;
while(1)
{
c = 2 * i;
if(c > n)
break;
if(c + 1 <= n && data[c + 1] < data[c])
c++;
if(data[i] <= data[c])
break;
swap(data, c, i);
i = c;
}
}

static void heapsort(int data[], int n)
{
int i;
for(i = 2; i <= n; i++)
{
siftup(data, i);
}
for(i = n; i >= 2; i--)
{
swap(data, 1, i);
siftdown(data, i - 1);
}
}

extern void heap(int a[], int n) //堆排序
{
int *p;
int i;
p = (int *)malloc((n + 1) * sizeof(int));
if(!p)
{
perror("malloc");
}
for(i = 0; i < n; i++)
*(p + i + 1) = a[i];
heapsort(p, n);
for(i = 0; i < n; i++)
a[i] = *(p + i + 1);
free(p);
}

基數排序根據你是N進制數,申請N個隊列,以空間換取時間,排序復雜度為線性o(n)

C. C語言怎樣產生一定范圍的隨機數

在C語言中,rand()函數可以用來產生隨機數,但是這不是真真意義上的隨機數,是一個偽隨機數,是根據一個數,可以稱它為種子。

為基準以某個遞推公式推算出來的一系數,當這系列數很大的時候,就符合正態公布,從而相當於產生了隨機數。

C語言產生一定范圍的隨機數的源代碼如下:

#include<stdio.h>

#include<stdlib.h>

int main()

{

int i;

for(i=0; i<10; i++) //隨機產生10個數。

{

printf("%d ", rand());

}

return 0;

}

(3)c語言中生成n個隨機數擴展閱讀

1、如果要隨機生成一個在一定范圍的數,你可以在宏定義中定義一個random(int number)函數,然後在main()裡面直接調用random()函數。

2、在對rand()的前三次調用中,並且此後得到的返回值仍然是在對rand()的第一批調用中所得到的其餘的返回值。因此,只有再次給srand()提供一個隨機的「種子」值,才能再次得到一個隨機數。

D. 怎樣用c語言生成n個隨機數

產生一定范圍隨機數的通用表示公式

要取得[a,b)的隨機整數,使用(rand() % (b-a))+ a;

要取得[a,b]的隨機整數,使用(rand() % (b-a+1))+ a;

要取得(a,b]的隨機整數,使用(rand() % (b-a))+ a + 1;

通用公式:a + rand() % n;其中的a是起始值,n是整數的范圍。

要取得a到b之間的隨機整數,另一種表示:a + (int)b * rand() / (RAND_MAX + 1)。

要取得0~1之間的浮點數,可以使用rand() / double(RAND_MAX)。

E. c語言怎麼生成隨機數

你好!

#include<stdio.h>
#include<stdlib.h>//生成隨機數用
#include<time.h>//利用時間生成種子
#include<math.h>

intmain()
{
inti;
inta[100];
srand(time(NULL));//生成種子

for(i=0;i<100;i++)
{
a[i]=rand()%1000+1000;//生成一個小於1000的隨機數
//然後加1000,變成1000-2000之間的數
printf("%d",a[i]);//列印
}

i=rand()%100;//隨機抽取其中的一個數
printf(" 抽取到的是:%d ",a[i]);//列印


return0;
}

F. c語言怎麼利用隨機函數產生N個隨機整數(20000以上)(好難。

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

intmain(intargc,char**argv){

voidgenerate_random(intn);

if(argc>=1)
generate_random(atoi(argv[1]));

return1;
}

voidgenerate_random(intn){

inti;
srand(time(NULL));

for(i=0;i<n;i++){

intr=20000+rand();
printf("%d ",r);
}
}

結果如下:

G. c語言中怎樣產生n個和為定值的隨機數

如果對符號沒有要求,那麼可以先產生n-1個隨機數,然後用和值減去前n-1個數的總和。
如果要求都是正數,那麼可以每獲得一個數後,用總和減去這個數,下一次獲取0到該數中間的值。這樣就得到都是正數了。

H. c語言,如何產生隨機數

1、第一步,先定義int一個數組和int一個指針變數。

I. C語言中怎樣生成隨機數

在VC中設計到隨機數有兩個函數

srand() and rand()

srand() 的作用是是一個種子,提供每次獲得隨機數的基數而已,rand()根據種子而產生隨機數

注意

1:srand() 里的值必須是動態變化的,否則得到的隨機數就是一個固定數

2:其實可以不用寫srand() ,只用rand()就可以了,省事,簡單,例子如下

如果我們想得到一個 0-60的隨機數那麼可以寫成

int i;

i=rand()%60;

就可以了。

當然最好有個統一的標注如下:

int i;

srand((unsigned)time( NULL ));

i=rand()%60;

這樣就OK了。