文档章节

案例:细菌实验分组

nimozp
 nimozp
发布于 2017/06/05 14:00
字数 912
阅读 45
收藏 0

描述:

有一种细菌分为A、B两个亚种,它们的外在特征几乎完全相同,仅仅在繁殖能力上有显著差别,A亚种繁殖能力非常强,B亚种的繁殖能力很弱。在一次为时一个小时的细菌繁殖试验中,实验员由于疏忽把细菌培养皿搞乱了,请你编写一个程序,根据实验结果,把两个亚种的培养皿重新分成两组。

细菌繁殖能力(繁殖率)的量化标准为一个小时内细菌数量增长的比例(繁殖率=一个小时细菌数量/原本细菌数量)。

输入:

输入有多行,第一行为整数n(n<=100),表示有n个培养皿。其余n行,每行有三个整数,分别代表培养皿编号,试验前细菌数量,试验后细菌数量。假设试验没有误差。

输出:

输出有多行:第一行输出A亚种培养皿的数量,其后每行输出A亚种培养皿的编号,按繁殖率升序排列。

然后一行输出B亚种培养皿的数量,其后每行输出B亚种培养皿的编号,也按繁殖率升序排列。

 利用编程解决实际问题的时候,首先映入我们脑海的是:哪些数据是已知的,以及我们想要得到怎样的输出结果。然后再着手去考虑实际过程的解决。

根据情况描述,我们马上可以想到利用繁殖率的不同来区分A、B细菌。同类细菌的繁殖率差异会远远小于异类细菌的繁殖率差异,这一点我们可以根据描述很容易得到。因此我们可以先可以根据细菌的繁殖率从大到小进行排序,然后比较相邻两个细菌繁殖率的差值大小,我们一定会找到一个差值要远远大于其他的差值,而那个差值对应两个细菌培养皿就正好是A、B两组细菌的分界线,因此从程序的设计的角色来看,就是要寻找这个最大差值。

程序:用C++写的。从下列的代码中,我们可以看到,上述的问题主要可以分解成1、排序问题;2、比较大小问题;

#include <iostream>
using namespace std;
int main()
{
    int n;//n为细菌的数量
    //id记录细菌的编号,rate记录细菌的繁殖率,第i个细菌对应id[i]和rate[i]
    int id[100];
    double rate[100];
    
    cin>>n;
    for (int i=0;i<n;i++){
        int initial,final;
        cin>>id[i]>>initial>>final;
        rate[i]=(double)final/initial;
    }
    
    //对整个细菌排序
    for (int i=0;i<n;i++){
        for(int j=0;j<n-i-1;j++){
            if(rate[j+1]>rate[j]){
                int tmpId = id[j];
                id[j] = id[j+1];
                id[j+1] = tmpId;
                double tmpRate = rate[j];
                rate[j]=rate[j+1];
                rate[j+1]=tmpRate;
            }
        }
    }
    //记录最大的差
    double maxDiff = 0;
    // 和最大差的下标
    int maxDiffIndex =0;
    for (int i=0;i<n-1;i++){
        double diff = rate[i]-rate[i+1];
        if(maxDiff<diff){
            maxDiff = diff;
            maxDiffIndex = i;
        }
    }
    //输出繁殖率较大的那组细菌
    cout<<maxDiffIndex+1<<endl;
    for (int i= maxDiffIndex;i>=0;i--){
        cout<<id[i]<<endl;
    }
    //输出繁殖率较小的那组细菌
    cout<<n-maxDiffIndex-1<<endl;
    for(int i=n-1;i>=maxDiffIndex+1;i--){
        cout<<id[i]<<endl;
    }
    return 0;
}

利用编程解决问题,最关键的还是实际解决问题的能力,代码只是工具,让计算机明白解决过程的工具。

因此,回到本质,想要程序编的好,最核心的还是:

实际解决问题的能力!

 

© 著作权归作者所有

nimozp
粉丝 0
博文 1
码字总数 912
作品 0
杭州
私信 提问
科学家用细菌研制了一种“活墨水”,可用于3D器官打印

实验结果显示,人体不仅对这种“活墨水”无任何排异反应,还不会对环境造成污染,十分环保安全。 近日,苏黎世联邦理工学院(ETHZ)复合材料实验室的研究团队研发出了一种可用于皮肤和器官移...

行者武松
2018/04/13
0
0
全新细菌“墨水”可呈现任何三维结构,有望用于皮肤移植

  如今提到 3D 打印并不稀奇,但所用的材料无非就是塑料或是金属粉末这一类冰冷坚硬无生命特征的“死”墨水,对于制造一些需要高强度的钢化材料,这类墨水无疑是再合适不过,但对于制造需要...

DeepTech深科技
2017/12/07
0
0
机器算法或可以解决细菌抗药性大难题

算法演算,大数据分析细菌抗药性。 我们都知道的一个常识就是,一种药一旦服用的次数多了或是时间长了,细菌或是病毒就会产生抗药性,那么效果就会大大减少,甚至都没有,特别是世界重大的病...

行者武松
2018/03/01
0
0
“基因编辑婴儿”背后到底用了什么术?

硅谷Live / 实地探访 / 热点探秘 / 深度探讨 基因编辑婴儿在中国诞生了! 就在昨天,南方科技大学的副教授贺建奎,突然在“第二届国际人类基因组编辑峰会”召开的前一天宣布这一爆炸性新闻。...

硅谷密探
2018/11/27
0
0
神奇!未来物联网的能源——纸生电

图:Photo: Seokheun Choi 最近,打印纸一下子火了。至少,在电子设备和电池业界火了。 从可吸收医疗设备、到智能交通所需的传感器,所有设备都需要能源,导致了微型电子设备和电池的爆炸式增...

CSDN资讯
2018/09/07
0
0

没有更多内容

加载失败,请刷新页面

加载更多

医疗项目pc端后台页面用vue重构整个html页面

页面源码是vue

xintaiideas
33分钟前
2
0
领域驱动中的“贫血症和失忆症” --实践领域驱动--原文

贫血症严重危害着人类健康,并且伴随有危险的副作用。当贫血领域对象被首次提出来时,它并不是一个博得赞美的词汇,它描述的是一个缺少内在行为领域对象。奇怪的是,人们对于贫血领域对象的态...

还仙
37分钟前
5
0
条码打印软件中标签预览正常打印无反应怎么解决

在使用条码打印软件制作标签时,有客户反馈,标签打印预览正常的,但是打印无反应,咨询是怎么回事?今天针对这个情况,可以参考以下方法进行解决。 一、预览正常情况下,打印没反应 (1)在条码...

中琅软件
47分钟前
5
0
判断字符串的时候

判断字符串的时候一定把常量房前边, //报警程度 String leve = vo.getDeviceAlertDeal().getWarnLevel(); if(("0").equals(leve)) { row.add("无报警"); }else if(("1").equals(leve)) { ro......

简小姐
47分钟前
7
0
Linux maven3.6.2 install

PS:安装 maven 之前请先安装 jdk 1.安装 wget 命令(安装过就不用了) yum -y install wget 2.寻找需要的 maven 版本 https://maven.apache.org/download.cgi 3.进入 /var/local 文件夹 cd...

东方神祇
49分钟前
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部