编程题#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<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
5c语言的冒泡排序算法
4
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论