• 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 }

     

  • 相关阅读:
    用户控件的缓存技术之二【共三篇】
    .NET获取URL的各种方式及其区别
    图片上传封装类【包括图片上传和缩略图上传】.NET
    .NET抓取数据范例 抓取页面上所有的链接
    JQuery基础 学习的一些例子以及手册
    呵呵呵呵。。。系统还原了,终于可以用IE登陆百度了
    不用框架使用ajax 纯js使用ajax post,get范例及其区别
    用ashx还是aspx写ajax响应
    repeater绑定数组、哈希表、字典 ArrayList/HashTable,Dictionary为datasource
    Access数据库访问类 帮助类
  • 原文地址:https://www.cnblogs.com/dagon/p/4709371.html
Copyright © 2020-2023  润新知