描述
有一种细菌分为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提示
亚种内部细菌繁殖能力差异 远远小于 亚种之间细菌繁殖能力差异。
也就是说,亚种间任何两组细菌的繁殖率之差都比亚种内部两组细菌的繁殖率之差大。
#include<iostream> #include<iomanip> using namespace std; int main() { int n;//n个培养皿 cin >> n; int id[100]; double pre_num[100]; double next_num[100]; double rate[100]; for (int i = 0; i < n; i++) { cin >> id[i] >> pre_num[i] >> next_num[i]; rate[i] = next_num[i] / pre_num[i]; } double temp1 = 0; int temp2=0; for(int i=0;i<n;i++) for (int j = 0; j < n - 1 - i; j++) { if (rate[j + 1] > rate[j]) { temp1 = rate[j]; rate[j] = rate[j + 1]; rate[j + 1] = temp1;//繁殖率冒泡排序 temp2 = id[j]; id[j] = id[j + 1]; id[j + 1] = temp2;//对应的编号交换 } } double max = 0; int maxid = 0; int num = 0; for (int i = 0; i < n-1; i++) { if ((rate[i] - rate[i + 1]) > max) { max = rate[i] - rate[i + 1]; maxid = id[i]; num = i; } } cout << num + 1 << endl; for (int i = num; i >= 0; i--) { cout << id[i] << endl; } cout << (n - num - 1 )<< endl; for (int i = n-1; i >num; i--) { cout << id[i] << endl; } return 0; }
这是之前做过的题,但是还是一直错,最后看了别人的代码才知道错在了找最大差的循环上,多做了一次循环导致最后一个数会和一个随机数相减,则最大差的位置就会出错。
想想现在可以不停的run不停的改,还有别人的代码可以参考,如果是独立开发,没有答案没有参考又该怎么办呢?
还得好好学调试代码啊