编程题#5:细菌实验分组
描述
有一种细菌分为A、B两个亚种,它们的外在特征几乎完全相同,仅仅在繁殖能力上有显著差别,A亚种繁殖能力非常强,B亚种的繁殖能力很弱。在一次为时一个 小时的细菌繁殖实验中,实验员由于疏忽把细菌培养皿搞乱了,请你编写一个程序,根据实验结果,把两个亚种的培养皿重新分成两组。
输入
输入有多行,第一行为整数n(n≤100),表示有n个培养皿。
其余n行,每行有三个整数,分别代表培养皿编号,试验前细菌数量,试验后细菌数量。
输出
输出有多行:
第一行输出A亚种培养皿的数量,其后每行输出A亚种培养皿的编号,按繁殖率升序排列。
然后一行输出B亚种培养皿的数量,其后每行输出B亚种培养皿的编号,也按繁殖率升序排列。
#include <iostream> using namespace std; void asc(int id[],double rate[],int n); int maxdiff(double rate[],int n); int main() { int n,a, index, inital,final; int id[100]; double rate[100]; cin >> n; for (int i = 0; i < n; i++) { cin >> a >> inital >> final; id[i] = a; rate[i] = 1.0 * final / inital; } asc(id,rate,n);//调用升序排列函数 index = maxdiff(rate,n); //调用最大差函数,返回最大差前者数组下标 cout << n - index - 1 << endl; for (int i = index + 1; i < n; i++) { cout << id[i] << endl; } cout << index + 1 << endl; for (int i = 0; i <= index; i++) cout << id[i] << endl; return 0; } void asc(int id[],double rate[],int n) { for (int i = 0; i < n - 1; i++) for ( int j = 0; j < n - i - 1; j++) { if (rate[j + 1] < rate[j]) { int temid = id[j + 1]; id[j + 1] = id[j]; id[j] = temid; double temrate = rate[j + 1]; rate[j + 1] = rate[j]; rate[j] = temrate; } } } int maxdiff(double rate[],int n) { int max = 0,j; for (int i = 0; i <= n - 2; i++) { if (rate[i+1] - rate[i] > max) { max = rate[i+1] - rate[i]; j = i; } } return j; }
人一我百,人十我万!自己选择的路,跪着也要走完。
浙公网安备 33010602011771号