POJ C程序设计进阶 编程题#5:细菌分组实验

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

来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩。)

注意: 总时间限制: 1000ms 内存限制: 65536kB

描述

有一种细菌分为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

提示

亚种内部,细菌繁殖能力差异远远小于亚种之间细菌繁殖能力的差异。

也就是说,亚种间任何两组细菌的繁殖率之差都比亚种内部两组细菌的繁殖率之差大。


 1 #include <iostream>
 2 using namespace std;
 3 int main() {
 4   int n; // n为细菌的数量
 5   // id记录细菌的编号, rate记录细菌的繁殖率,第i个细菌对应id[i]和rate[i]
 6   int id[100];
 7   double rate[100];
 8
 9   cin >> n;
10   for (int i = 0; i < n; i++) {
11     int initial, final;
12     cin >> id[i] >> initial >> final;
13     rate[i] = (double)final / initial;
14   }
15
16 // 对整个细菌排序
17   for (int i = 0; i < n; i++) {
18     for (int j = 0; j < n - i - 1; j++) {
19       if (rate[j + 1] > rate[j]) {
20         int tmpId = id[j];
21         id[j] = id[j + 1];
22         id[j + 1] = tmpId;
23         double tmpRate = rate[j];
24         rate[j] = rate[j + 1];
25         rate[j + 1] = tmpRate;
26       }
27     }
28   }
29
30 // 记录最大的差
31   double maxDiff = 0;
32   // 和最大差的下标
33   int maxDiffIndex = 0;
34   for (int i = 0; i < n - 1; i++) {
35     double diff = rate[i] - rate[i + 1];
36     if (maxDiff < diff) {
37       maxDiff = diff;
38       maxDiffIndex = i;
39     }
40   }
41
42   //输出繁殖率较大的那组细菌
43   cout << maxDiffIndex + 1 << endl;
44   for (int i = maxDiffIndex; i >= 0; i--) {
45     cout << id[i] << endl;
46   }
47
48   //输出繁殖率较小的那组细菌
49   cout << n - maxDiffIndex - 1 << endl;
50   for (int i = n - 1; i >= maxDiffIndex + 1; i--) {
51     cout << id[i] << endl;
52   }
53   return 0;
54 }
时间: 2024-10-22 09:26:00

POJ C程序设计进阶 编程题#5:细菌分组实验的相关文章

POJ C程序设计进阶 编程题#3:运算符判定

编程题#3:运算符判定 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 两个整数 a 和 b 运算后得到结果 c.表示为:a ? b = c,其中,?可能是加法 +,减法 -,乘法 *,整除 / 或 取余 %.请根据输入的 a,b,c 的值,确定运算符.如果某种运算成立,则输出相应的运算符,如果任何运算都不成立,则输出 error. 例如: 输入: 3,4,5 输出: er

POJ C程序设计进阶 编程题#2:字符串中次数第2多的字母

编程题#2:字符串中次数第2多的字母 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 输入一串长度不超过500个符号的字符串,输出在串中出现第2多的英语字母(大小写字母认为相同)和次数(如果串中有其它符号,则忽略不考虑).如果有多个字母的次数都是第2多,则按串中字母出现的顺序输出第1个. 例 ab&dcAab&c9defgb 这里,a 和 b都出现3次,c和d都出现2

POJ C程序设计进阶 编程题#4:寻找平面上的极大点

编程题#4:寻找平面上的极大点 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个平面上,如果有两个点(x,y),(a,b),如果说(x,y)支配了(a,b),这是指x>=a,y>=b; 用图形来看就是(a,b)坐落在以(x,y)为右上角的一个无限的区域内. 给定n个点的集合,一定存在若干个点,它们不会被集合中的任何一点所支配,这些点叫做极大值点. 编程找出所有的极大

POJ C程序设计进阶 编程题#3:寻找山顶

编程题#3:寻找山顶 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 在一个m×n的山地上,已知每个地块的平均高程,请求出所有山顶所在的地块(所谓山顶,就是其地块平均高程不比其上下左右相邻的四个地块每个地块的平均高程小的地方). 输入 第一行是两个整数,表示山地的长m(5≤m≤20)和宽n(5≤n≤20). 其后m行为一个m×n的整数矩阵,表示每个地块的平均高程.每行的整数

POJ C程序设计进阶 编程题#2: 配对碱基链

编程题#2: 配对碱基链 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 脱氧核糖核酸(DNA)由两条互补的碱基链以双螺旋的方式结合而成.而构成DNA的碱基共有4种,分别为腺瞟呤(A).鸟嘌呤(G).胸腺嘧啶(T)和胞嘧啶(C).我们知道,在两条互补碱基链的对应位置上,腺瞟呤总是和胸腺嘧啶配对,鸟嘌呤总是和胞嘧啶配对.你的任务就是根据一条单链上的碱基序列,给出对应的互补链上

POJ C程序设计进阶 编程题#1:含k个3的数

编程题#1:含k个3的数 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 输入二个正整数m 和 k,其中1 < m < 100000,1 < k <5 ,判断m 能否被19整除,且恰好含有k个3,如果满足条件,则输出YES,否则,输出NO. 例如,输入: 43833 3 满足条件,输出YES 如果输入 39331 3 尽管有3个3,但不能被19整除,也不满足条

POJ C程序设计进阶 编程题#6:流感传染

编程题#6:流感传染 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 有一批易感人群住在网格状的宿舍区内,宿舍区为n*n的矩阵,每个格点为一个房间,房间里可能住人,也可能空着.在第一天,有些房间里的人得了流感,以后每天,得流感的人会使其邻居传染上流感,(已经得病的不变),空房间不会传染.请输出第m天得流感的人数. 输入 第一行一个数字n,n不超过100,表示有n*n的宿舍房

POJ C程序设计进阶 编程题#1:寻找下标

编程题#1:寻找下标 来源: POJ (Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 已知一个整数数组x[],其中的元素彼此都不相同.找出给定的数组中是否有一个元素满足x[i]=i的关系,数组下标从0开始. 举例而言,如果x[]={-2,-1,7,3,0,8},则x[3] = 3,因此3就是答案. 输入 第一行包含一个整数n (0 < n < 100),表示数组中元素的个数. 第二行包含

POJ C程序设计进阶 编程题#2:四大湖

编程题#2:四大湖 来源: POJ(Coursera声明:在POJ上完成的习题将不会计入Coursera的最后成绩.) 注意: 总时间限制: 1000ms 内存限制: 65536kB 描述 我国有4大淡水湖. A说:洞庭湖最大,洪泽湖最小,鄱阳湖第三. B说:洪泽湖最大,洞庭湖最小,鄱阳湖第二,太湖第三. C说:洪泽湖最小,洞庭湖第三. D说:鄱阳湖最大,太湖最小,洪泽湖第二,洞庭湖第三. 已知这4个湖的大小均不相等,4个人每人仅答对一个, 请编程按照鄱阳湖.洞庭湖.太湖.洪泽湖的顺序给出他们的