如何用c语言将100个女生随机分为50组

作者&投稿:鄢会 (若有异议请与网页底部的电邮联系)
C语言:随机生成100个数,要求分成两组,一组50个数,让这两组的和相差尽量小。~

以下函数通过系统时间随机生成1-1000之间的随机数,分成两组后使其总和差值最小。
算法分析:见源程序中的注释,算法可能有些许额误差,共参考。

#include
#include
#include

//******************产生长度为length的不为0的可重复随机数组******************//
void radomArray(int *array,int length)
{
srand((unsigned)time(NULL));//使用系统时间作为随机数的种子产生随机数
int i=0,j=0;
while(j<length)
{
i=rand()%1000;//0-1000的随机数,可做修改
if(i!=0)//随机数不为0
{
array[j]=i;
j++;
}
}
}

//******************给数组排序,从大到小******************//
void sequence(int * array,int len)
{
int tmp=0;
for(int m=0;m<len;m++)
{
for(int n=0;n<len;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<len_01+len_02;k++)
{
if(dat_01<dat_02&&i<len_01)//如果数组1数据总和小于数组2,同时数组1未到上限,将下一个数据存入数组1
{
arr_01[i]=arr[k];
dat_01+=arr[k];
i++;
}
else if(dat_01>=dat_02&&j<len_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;i<length;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("产生的随机数组从小到大排列为:
");
for(tmp=0;tmp<len;tmp++)//输出随机数组
printf("%d",data[tmp]);
printf("
");

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


printf("第一块数组为:
");
for(tmp=0;tmp<len_01;tmp++)
{
printf("%d",data_1[tmp]);
}
printf("
");
printf("第二块数组为:
");
for(tmp=0;tmp<len_02;tmp++)
{
printf("%d",data_2[tmp]);
}
printf("
");

printf("最原始数组的数据总和为:%d
",sum(data,len));
printf("拆分后数组的数据总和为:%d
",sum(data_1,len_01)+sum(data_2,len_02));
printf("第一块数组的数据总和为:%d
",sum(data_1,len_01));
printf("第二块数组的数据总和为:%d
",sum(data_2,len_02));
printf("两块数组数据的的差值为:%d
",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

#include#include#include#include#define R (abs(rand())%100)int group[100],i,j,k,p;int member[10][10],members[10];int main(){for(i=0;i<100;i++)group[i]=i;srand(time(NULL));for(j = R + 100;j--;){i=R;k=R;p=group[i];group[i] = group[k];group[k] = p;}for(i=0;i<100;i++){member[group[i]/10][members[group[i]/10]] = i;members[group[i]/10]++;}for(i=0;i<10;i++){printf("第 %02d 组 : ",i+1);for(j=0;j<10;j++){printf("%03d%c",member[i][j]+1,j==9?10:32);}}}

以下程序供你参考

以下函数通过系统时间随机生成1-100之间的随机数,分成两组后使其总和差值最小。
算法分析:见源程序中的注释,算法可能有些许额误差,共参考。

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

//******************产生长度为length的不为0的可重复随机数组******************//
void radomArray(int *array,int length)
{
srand((unsigned)time(NULL));//使用系统时间作为随机数的种子产生随机数
int i=0,j=0;
while(j<length)
{
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<len;m++)
{
for(int n=0;n<len;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<len_01+len_02;k++)
{
if(dat_01<dat_02&&i<len_01)//如果数组1数据总和小于数组2,同时数组1未到上限,将下一个数据存入数组1
{
arr_01[i]=arr[k];
dat_01+=arr[k];
i++;
}
else if(dat_01>=dat_02&&j<len_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;i<length;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<len;tmp++)//输出随机数组
printf("%d\t",data[tmp]);
printf("\n");

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

printf("第一块数组为:\n");
for(tmp=0;tmp<len_01;tmp++)
{
printf("%d\t",data_1[tmp]);
}
printf("\n");
printf("第二块数组为:\n");
for(tmp=0;tmp<len_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

#include "stdio.h"

#define MAX 100

#define SWAP(i,j) do{int t = i;i=j;j=t;}while(0);
//洗牌算法

void shuffle(int girls[])
{
int g1, g2,gTmp;
int i = 0;
for(i=0;i<MAX;i++)
{
g1 = rand()%MAX;
g2 = rand()%MAX;
if(g1!=g2)
{
SWAP(girls[g1],girls[g2]);
}
}
}

int main(void)
{
int girls[MAX];
int i;
for(i = 0;i<MAX;i++)girls[i]=i;
shuffle(girls);
for(i = 0;i<MAX;i++)
{
printf("girls %d at %d group\n",i,girls[i]/2);
}
}

是要每组两个吗


C语言编程,要将100元钱换成1元,2元,5元的零钱.每种钱数大于0,而且为5...
include <stdio.h>int main(int argc, char *argv[]){ const int total = 100; \/\/总共钱数 const int multipe = 5; \/\/倍数 \/\/各种面值money的数量 int bill_1_num, bill_2_num, bill_5_num; \/\/实际是求 5,10,25 个数 const int bill_1 = multipe*...

C语言 编程 输出100~300之间所有素数
在探索计算机编程领域时,学习编写程序以找出特定范围内的素数是一个基本且重要的技能。本文将指导你如何使用C语言编写程序来输出100到300之间的所有素数。素数是只有1和它本身能整除的自然数,除了1和2以外的所有素数都是奇数。下面,我们将通过C语言代码实现这个任务。首先,我们需要包含C语言中的头文件,...

用C语言程序求100的阶乘
include <stdio.h> main(){ int i,j,sum=1;int count=0;for(i=1;i<=100; i++){ sum=1;for(j=1;j<=i;++j){ sum*=j;} count+=sum;} printf("%d",count);}

用c语言循环结构输出100以内的积数。
能够分解成若干个素数因子之积的奇数,称之为积数。也就是奇合数。根据这个定义,只要是100以内的奇数,同时不是素数的,都是符合题意的积数。于是代码如下:include <stdio.h>#include <math.h>int is_prime(int n)\/\/判断素数函数。{ int i; for(i = 2; i <= sqrt(n); i ++) ...

怎样用c语言书写1—100的所有的数
include <stdio.h>main(){ int i=0; for( i=0; i<100; i++ ) printf( "%d\\n", i+1 );} 支持 @j21j467

百分号在C语言中是怎样用的?
在C语言里面是 除余 和 格式输出符的作用。求余运算是求前一个整型数据除以后一个整型数据的余数。举例说明:整型数据 int m=10,n=3,k;k=m%n;那么k就等于1;例如:表达式 a % b 就是计算 a 除以 b 得出的余数。而%d,%f等表示输出整型,浮点型数据 举例说明:1.我们要把一个3位数0~999...

输入100个数据,输出平均值。用c语言表示
写主要代码 void main(){ int n aver;\/\/平均值 for(i=0;i<100;i++){ scanf("%d",&n);\/\/输入100个数。sum+=n;\/\/计算输入总和。} printf("%0.2f\\n",sum\/100);}

求100的阶乘,用C语言中的数组怎么来求啊?能不能用数组模拟乘法来算...
以上两位把100阶乘想的太简单了,如果不是100,是1000的阶乘呢?C里面什么类型能放的下那么大的数字么?是unsigned long long 还是 什么?恐怕都不行吧?define MAXLEN 100 define MAXSUM 300\/\/存放结果的数组最大长度 include <stdio.h> include <math.h> main(){ int i,j,k,n,sum,s;int ...

用c语言怎么编写100-99-98-97...-1
include "stdio.h"void main(){ int i = 0;\/\/计数变量 int sub = 100;\/\/统计变量 for( i= 99; i>=1; i-- )sub -= i;printf("The result is %d",sub);}

1 4 7 10 … 97 100用c语言编写?
用C语言计算这个等差数列的和,用一个循环就可以解决问题。include<studio.h> int main(){int i,s=0;for(i=1;i<101;i+=3)s+=i;printf (“%d\\n”,s);return 0;}

友好区18988209237: 如何用c语言将100个女生随机分为50组 -
琴行如意: 以下程序供你参考 以下函数通过系统时间随机生成1-100之间的随机数,分成两组后使其总和差值最小.算法分析:见源程序中的注释,算法可能有些许额误差,共参考.#include#include#include//******************产生长度为length的不为0的可...

友好区18988209237: 用C语言实现: 对编号为1~100的100个人进行随机分组,一共分为10组,每组10人. -
琴行如意: 生成1~100之间的随机数,作为数组的下标 ~~~~~~~~~~~

友好区18988209237: 用C语言编写一个随机分组的程序 -
琴行如意: 我的这个程序是先读入人名与成绩,然后按先人名再成绩如入:#include"stdio.h" long int a[1000]={0}; char b[1000][100]; //输入最多1000人,每人名字不超过100字符 main() {long int n; scanf("%ld",&n); for(i=1;i{ scanf("%s %ld",&b[i],&a[i]); } 然后三个子程序判断成绩就行了,不写了......

友好区18988209237: 如何用c++编写一个可以把100随机分成10份的函数. -
琴行如意: #include#include #include using namespace std; int a[10]; void func(){ srand((unsigned)time(NULL)); for (int i=0;i<100;i++) { a[rand()%10]++; } } int main(){ func(); for (int i=0;i<10;i++){ cout << "No." << i+1 << ":" << a[i] << endl; } }

友好区18988209237: c语言怎么把100个人的名字按姓名排序输出 -
琴行如意: 1 将100个人的姓名,存到二维字符数组中 2 通过strcmp比较. 通过strcpy赋值. 对二维字符数组进行排序 3 输出排序的结果.排序中,除了比较和赋值与普通的整型数组排序不同外,其他的 都一样.

友好区18988209237: C语言怎么实现随机分配? -
琴行如意: srand( (unsigned)time( NULL ) ); ; num=rand()%k; 用这个生成随机数你应该会吧 然后给6个长方形每个一个随机数,排序,然后将较大的2个一组,较小的2个一组,中间2个一组 也可以给每个方块一个0-2的随机数,同时在生成随机的时候加特判,如果对应数字的组里满了就重作随机 由于方块数少,不用太在乎算法时间复杂度

友好区18988209237: c语言如何实现随机生成多个数组至少要100个 -
琴行如意: 需要准备的材料分别有:电脑、C语言编译器.1、首先,打开C语言编译器,新建一个初始.cpp文件,例如:test.cpp.2、在test.cpp文件中,输入C语言代码:srand((unsigned)time(NULL)); for (int i = 0;i < 100; i++) { printf("%d ", rand()); }3、编译器运行test.cpp文件,此时成功随机生成了100个随机数.

友好区18988209237: 如何用C语言产生从 - 100到100的随机数 -
琴行如意: 核心代码 #include srand(time(0)) x=rand()%200-99; 注意是减99,不是100;若不使用伪随机数则应加上srand(time(0)),这又使用了time,需加入#include

友好区18988209237: c程序怎么随机产生100个数并排序 -
琴行如意: #include <stdio.h>#include <stdlib.h>#include <time.h> //用到了time函数 void main(){ int i,number,j,temp,a[100]={0};srand((unsigned) time(NULL)); //用时间做种,每次产生随机数不一样for (i=0;i<100;i++){a[i]=rand()%100+1;}for (i=0;i<99;i++){for (j...

友好区18988209237: C语言随机生成100个数并用冒泡法比较大小 -
琴行如意: 生成随机数组:Random rdm = new Random(); int[] arr = new int[100]; for (int i = 0; i < 100; i++) { arr[i] = rdm.Next(0, 100); } 冒泡排序: for (int i = 1; i < arr.Length; i++) { for (int j = 0; j < arr.Length - i; j++) { if (arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } }

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网