编程题#5:细菌实验分组 C语言

先求出繁殖率放到value[100]里

然后用bubble(int *arraynum,int *arrayvalue,int nn)冒泡排序算法对繁殖率value和培养皿编号num从大到小排序

记录繁殖率高的培养皿个数bignum 从大到小输出编号num

记录繁殖率高的培养皿个数smallnum 从大到小输出编号num

获得的新知识点:

自己写的函数可以不返回值,就没有return了 

新命名的函数void bubble(int *arraynum,int *arrayvalue,int nn)已经是对形参arraynum,arrayvalue,nn的声明,函数体里面不用在声明了

而且arraynum和arrayvalue带*是因为传递的是num和value数组的首地址,这样才能在函数体里面对整个数组里的元素进行操作

#include
void bubble(int *arraynum, int *arrayvalue, int nn){
	int temp = 0, flagnum = 0;
	int i, j;
	for (j = 0; j < nn; j++){
		for (i = 0; i < nn-j; i++){
			if (arrayvalue[i + 1] > arrayvalue[i]){
				//繁殖率交换顺序
				temp = arrayvalue[i+1];
				arrayvalue[i+1] = arrayvalue[i];
				arrayvalue[i] = temp;
				//繁殖率对应的培养皿编号也交换顺序
				temp = arraynum[i+1];
				arraynum[i+1] = arraynum[i];
				arraynum[i] = temp;
			}
		}
	}
}
int main(){
	int i;
	int num[100],value[100],value1[100],value2[100];
	int  n;
	int small = 0,big = 0,smallnum=0,bignum=0;
	scanf("%d", &n);
	for (i = 0; i < n; i++){
		scanf("%d %d %d", &num[i], &value1[i],&value2[i]);
		value[i] = value2[i] / value1[i];
	}
	/*for (i = 0; i < n; i++){
		printf("%d %d %d %d\n", num[i], value1[i], value2[i],value[i]);
		
	}*/
	bubble(num, value,n);//从大到小冒泡排序
	big = value[0];
	small = value[n-1];
	//printf("最小值:%d\n", small);
	//printf("最大值:%d\n", big);
	for (i = 0; i < n; i++){
		if (value[i] - small < big - value[i]){
			smallnum++;
		}
		else{
			bignum++;
		}
	}
	printf("%d\n", bignum);
	for (i = 0; i < bignum; i++){
		printf("%d\n", num[i]);
	}
	
	printf("%d\n", smallnum);
	for (i = smallnum-1; i < n; i++){
		printf("%d\n", num[i]);
	}

	return 0;
}
描述
有一种细菌分为A、B两个亚种,它们的外在特征几乎完全相同,仅仅在繁殖能力上有显著差别,A亚种繁殖能力非常强,B亚种的繁殖能力很弱。在一次为时一个 小时的细菌繁殖实验中,实验员由于疏忽把细菌培养皿搞乱了,请你编写一个程序,根据实验结果,把两个亚种的培养皿重新分成两组。
输入
输入有多行,第一行为整数n(n≤100),表示有n个培养皿。
其余n行,每行有三个整数,分别代表培养皿编号,试验前细菌数量,试验后细菌数量。
输出
输出有多行:
第一行输出A亚种培养皿的数量,其后每行输出A亚种培养皿的编号,按繁殖率升序排列。
然后一行输出B亚种培养皿的数量,其后每行输出B亚种培养皿的编号,也按繁殖率升序排列。
样例输入
5
1 10 3456
2 10 5644
3 10 4566
4 20 234
5 20 232
样例输出
3
1
3
2
2
5
4


你可能感兴趣的:(Coursera,C程序设计进阶)