c語言隨機分配,隨機分配函數

本文目錄一覽:

C語言怎麼實現隨機分配?

srand(

(unsigned)time(

NULL

)

);

;

num=rand()%k;

用這個生成隨機數你應該會吧

然後給6個長方形每個一個隨機數,排序,然後將較大的2個一組,較小的2個一組,中間2個一組

也可以給每個方塊一個0-2的隨機數,同時在生成隨機的時候加特判,如果對應數字的組裡滿了就重作隨機

由於方塊數少,不用太在乎演算法時間複雜度

C語言隨機分配的問題。有1000個file, 每個file複製成10份,然後隨機分配給1000個人 如何實現

1000個文件,我們給它編號成 0,1,2,到 999

複製成10份,也就是 0,1,2,到 999 每個號碼 重複 10 次。

把它們 放到數組中 int file_number[1000][10];

然後我們用洗牌的方法,把 file_number[t1][t2] 和 file_number[t3][t4]; 里的 文件號碼 交換。

t1,t2,t3,t4 是隨機數。洗它10 萬次,估計分布就很隨機了。

然後依次發給1000人,每人id 得 file_number[id][i] , i=0,1,…9.

==========

#includestdio.h

#includestdlib.h

#includemath.h

#includetime.h

int file_number[1000][10]; //大數組,用全局量

main()

{

int t1,t2,t3,t4,t;

int i,j,n=1000;

for (j=0;j1000;j++) for (i=0;i10;i++) file_number[j][i]=j; //初始文件號

srand(time(0)); //隨機種子

for (i=0;i100;i++)

for (j=0;j1000;j++){

t1=rand()%1000; t2 = rand()%10; //隨機下標

t3=rand()%1000; t4 = rand()%10; //隨機下標

t = file_number[t1][t2]; // 交換

file_number[t1][t2]= file_number[t3][t4]; // 交換

file_number[t3][t4] =t; // 交換

}

n=10; // 輸出前10人的文件號碼看看

for (j=0;jn;j++){

printf(“pernal_id=%d File_numbers:”,j);

for (i=0;i10;i++) printf(“%d “,file_number[j][i]);

printf(“\n”);

}

return 0;

}

C語言中的 malloc,calloc函數分配存儲空間是隨機的嗎?

是的,malloc和calloc函數都是向內存申請一定大小的空間,如果內存分配成功則返回指向被分配內存的指針(此存儲區中的初始值不確定),否則返回空指針NULL。

如何用c語言將100個女生隨機分為50組

以下程序供你參考

以下函數通過系統時間隨機生成1-100之間的隨機數,分成兩組後使其總和差值最小。

演算法分析:見源程序中的注釋,演算法可能有些許額誤差,共參考。

#includestdio.h

#includestdlib.h

#includetime.h

//******************產生長度為length的不為0的可重複隨機數組******************//

void radomArray(int *array,int length)

{

srand((unsigned)time(NULL));//使用系統時間作為隨機數的種子產生隨機數

int i=0,j=0;

while(jlength)

{

i=rand()%100;//0-100的隨機數,可做修改

if(i!=0)//隨機數不為0

{

array[j]=i;

j++;

}

}

}

//******************給數組排序,從大到小******************//

void sequence(int * array,int len)

{

int tmp=0;

for(int m=0;mlen;m++)

{

for(int n=0;nlen;n++)

{

if(array[m]array[n])

{

tmp=array[n];array[n]=array[m];array[m]=tmp;

}

else continue;

}

}

}

//******************將數組拆分為長度為len_01和長度為len_02的兩列並總和差值最小******************//

/*演算法分析:將有序數組(大到小)中數據依次分別放入數組1、數組2中,並分別統計其現有數據的總和,分別存入dat_01,dat_02中,

初始化判斷標準dat_01,dat_02為0;

根據數組現有數據總和dat_01和dat_02的關係,確定數據存入數組1還是數組2。

判斷過程:如果數組1現有數據總和小於數組2,同時數組1未到上限,將下一個數據存入數組1;

如果數組1現有數據綜合不小於數組2,同時數組2未到上限,將下一個數據存入數組2。

可能漏洞:數組1或數組2提前到達數組上限,導致原數組中剩餘數據直接轉入另一數組中,出現異常結果。*/

void seperate(int *arr,int * arr_01,int *arr_02,int len_01,int len_02)

{

int i=0,j=0,dat_01=0,dat_02=0;

for(int k=0;klen_01+len_02;k++)

{

if(dat_01dat_02ilen_01)//如果數組1數據總和小於數組2,同時數組1未到上限,將下一個數據存入數組1

{

arr_01[i]=arr[k];

dat_01+=arr[k];

i++;

}

else if(dat_01=dat_02jlen_02)//如果數組1數據不小於數組2,同時數組2未到上限,將下一個數據存入數

組2

{

arr_02[j]=arr[k];

dat_02+=arr[k];

j++;

}

}

}

//******************計算並返回長度為length的數組的數字總和******************//

int sum(int a[],int length)

{

int total=0;

for(int i=0;ilength;i++)

{

total+=a[i];

}

return total;

}

//******************主函數開始******************//

void main()

{

int data1=0,data2=0,tmp=0;

int len=100,len_01=50,len_02=50;//修改此處len,len_01,len_02即可修改初始數組長度,注意len_01+len_02=len,同

時最好len_01=len_02,防止出現異常。

int data[100],data_1[50],data_2[50];//上述len,len_01,len_02修改後,此處數組長度應相應修改。

radomArray(data,len);//產生100個數據的隨機數組

sequence(data,len);//給隨機數組從小到大排序

printf(“產生的隨機數組從小到大排列為:\n”);

for(tmp=0;tmplen;tmp++)//輸出隨機數組

printf(“%d\t”,data[tmp]);

printf(“\n”);

seperate(data,data_1,data_2,len_01,len_02);//將數組分為兩塊,使其總和差值最小

printf(“第一塊數組為:\n”);

for(tmp=0;tmplen_01;tmp++)

{

printf(“%d\t”,data_1[tmp]);

}

printf(“\n”);

printf(“第二塊數組為:\n”);

for(tmp=0;tmplen_02;tmp++)

{

printf(“%d\t”,data_2[tmp]);

}

printf(“\n”);

printf(“最原始數組的數據總和為:%d\n”,sum(data,len));

printf(“拆分後數組的數據總和為:%d\n”,sum(data_1,len_01)+sum(data_2,len_02));

printf(“第一塊數組的數據總和為:%d\n”,sum(data_1,len_01));

printf(“第二塊數組的數據總和為:%d\n”,sum(data_2,len_02));

printf(“兩塊數組數據的的差值為:%d\n”,sum(data_1,len_01)-sum(data_2,len_02));

}

運行結果:

產生的隨機數組從小到大排列為:

993 979 970 962 957 935 914 902 888 883

871 866 862 859 843 840 829 827 824 815

810 808 805 796 784 768 738 730 725 722

721 712 711 709 704 702 693 670 670 650

631 627 623 623 614 607 606 598 577 574

547 498 495 495 481 478 451 448 447 429

410 388 383 381 380 379 377 364 344 337

308 271 266 257 233 208 204 200 189 165

162 155 150 145 143 119 117 114 114 110

108 69 64 61 48 45 22 16 11 3

第一塊數組為:

979 970 957 902 883 871 859 840 829 815

810 805 768 738 725 721 709 702 670 670

631 623 607 606 574 498 495 481 451 447

410 383 379 377 337 271 266 233 200 189

155 145 119 117 114 108 61 45 11 3

第二塊數組為:

993 962 935 914 888 866 862 843 827 824

808 796 784 730 722 712 711 704 693 650

627 623 614 598 577 547 495 478 448 429

388 381 380 364 344 308 257 208 204 165

162 150 143 114 110 69 64 48 22 16

最原始數組的數據總和為:51116

拆分後數組的數據總和為:51116

第一塊數組的數據總和為:25559

第二塊數組的數據總和為:25557

兩塊數組數據的的差值為:2

Press any key to continue

如何使用c語言對數據隨機分組?

#include stdio.h

#include stdlib.h 

#include time.h 

int main()

{

int a[50]; //存放50個球

int i,cnt;

for( i=0;i50;i++ ) //標號

a[i]=i+1 ;

cnt=0;

srand( time(NULL) ) ;

while( cnt  25 ) //隨機取25個

{

i=rand()%50 ;

if ( a[i] != 0 )//防止重複計數

{

cnt++ ;

a[i]=0 ;//標記為已取

}

}

//以下為輸出分組結果

printf(“array 1:\n” );

cnt=0;

for( i=0;i50;i++ )

{

if ( a[i] == 0 )

{

cnt++ ;

printf(“%3d”, i+1 );

if ( cnt % 5 == 0 ) //每輸出5個一換行

printf(“\n”);

}

}

printf(“\n”);

printf(“array 2:\n” );

for( i=0;i50;i++ )

{

if ( a[i] )

{

cnt++ ;

printf(“%3d”, a[i] );

if ( cnt % 5 == 0 )

printf(“\n”);

}

}

printf(“\n”);

return 0;

}

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/248064.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 13:25
下一篇 2024-12-12 13:25

相關推薦

  • Python中引入上一級目錄中函數

    Python中經常需要調用其他文件夾中的模塊或函數,其中一個常見的操作是引入上一級目錄中的函數。在此,我們將從多個角度詳細解釋如何在Python中引入上一級目錄的函數。 一、加入環…

    編程 2025-04-29
  • Python中capitalize函數的使用

    在Python的字元串操作中,capitalize函數常常被用到,這個函數可以使字元串中的第一個單詞首字母大寫,其餘字母小寫。在本文中,我們將從以下幾個方面對capitalize函…

    編程 2025-04-29
  • Python創建分配內存的方法

    在python中,我們常常需要創建並分配內存來存儲數據。不同的類型和數據結構可能需要不同的方法來分配內存。本文將從多個方面介紹Python創建分配內存的方法,包括列表、元組、字典、…

    編程 2025-04-29
  • Python中set函數的作用

    Python中set函數是一個有用的數據類型,可以被用於許多編程場景中。在這篇文章中,我們將學習Python中set函數的多個方面,從而深入了解這個函數在Python中的用途。 一…

    編程 2025-04-29
  • 三角函數用英語怎麼說

    三角函數,即三角比函數,是指在一個銳角三角形中某一角的對邊、鄰邊之比。在數學中,三角函數包括正弦、餘弦、正切等,它們在數學、物理、工程和計算機等領域都得到了廣泛的應用。 一、正弦函…

    編程 2025-04-29
  • 單片機列印函數

    單片機列印是指通過串口或並口將一些數據列印到終端設備上。在單片機應用中,列印非常重要。正確的列印數據可以讓我們知道單片機運行的狀態,方便我們進行調試;錯誤的列印數據可以幫助我們快速…

    編程 2025-04-29
  • AES加密解密演算法的C語言實現

    AES(Advanced Encryption Standard)是一種對稱加密演算法,可用於對數據進行加密和解密。在本篇文章中,我們將介紹C語言中如何實現AES演算法,並對實現過程進…

    編程 2025-04-29
  • Python3定義函數參數類型

    Python是一門動態類型語言,不需要在定義變數時顯示的指定變數類型,但是Python3中提供了函數參數類型的聲明功能,在函數定義時明確定義參數類型。在函數的形參後面加上冒號(:)…

    編程 2025-04-29
  • 學習Python對學習C語言有幫助嗎?

    Python和C語言是兩種非常受歡迎的編程語言,在程序開發中都扮演著非常重要的角色。那麼,學習Python對學習C語言有幫助嗎?答案是肯定的。在本文中,我們將從多個角度探討Pyth…

    編程 2025-04-29
  • Python實現計算階乘的函數

    本文將介紹如何使用Python定義函數fact(n),計算n的階乘。 一、什麼是階乘 階乘指從1乘到指定數之間所有整數的乘積。如:5! = 5 * 4 * 3 * 2 * 1 = …

    編程 2025-04-29

發表回復

登錄後才能評論