您的位置:首页 > 编程语言 > C语言/C++

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

2017-01-14 15:41 866 查看
先求出繁殖率放到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<stdio.h>
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: