您的位置:

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;

}