先求出繁殖率放到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