女生节C语言程序设计,如何用c语言将100个女生随机分为50组

满意答案

02ae427d08e371d7e90d5b995e828d6d.png

sdfgawrt

2016.08.31

02ae427d08e371d7e90d5b995e828d6d.png

采纳率:57%    等级:9

已帮助:14人

以下程序供你参考

以下函数通过系统时间随机生成1-100之间的随机数,分成两组后使其总和差值最小。

算法分析:见源程序中的注释,算法可能有些许额误差,共参考。

#include

#include

#include

//******************产生长度为length的不为0的可重复随机数组******************//

void radomArray(int *array,int length)

{

srand((unsigned)time(NULL));//使用系统时间作为随机数的种子产生随机数

int i=0,j=0;

while(j

{

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;m

{

for(int n=0;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;k

{

if(dat_01

{

arr_01[i]=arr[k];

dat_01+=arr[k];

i++;

}

else if(dat_01>=dat_02&&j

组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;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;tmp

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

printf("\n");

seperate(data,data_1,data_2,len_01,len_02);//将数组分为两块,使其总和差值最小

printf("第一块数组为:\n");

for(tmp=0;tmp

{

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

}

printf("\n");

printf("第二块数组为:\n");

for(tmp=0;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

00分享举报

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值