练习题 | 细菌繁殖

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了练习题 | 细菌繁殖相关的知识,希望对你有一定的参考价值。

题名  细菌繁殖

问题描述

一种细菌的繁殖速度是每天成倍增长。例如:第一天有10个,第二天就变成20个,第三天变成30个,第四天变成40个,……。现在给出第一天的日期和细菌数目,要你写程序求出到某一天的时候,细菌的数目。

输入数据

第一行有一个整数n,表示测试数据的数目。其后n行每行有5个整数,整数之间用一个空格隔开。第一个数表示第一天的月份,第二个数表示第一天的日期,第三个数表示第一天细菌的数目,第四个数表示要求的那一天的月份,第五个数表示要求的那一天的日期。已知第一天和要求的一天在同一年并且该年不是闰年,要求的一天一定在第一天之后。数据保证要求的一天的细菌数目在整数范围内。

输出要求

对于每一组测试数据,输出一行,该行包含一个整数,为要求的一天的细菌数。

输入样例

2

1 1 1 1 2

2 28 10 3 2

输出样例

2

30

思考 

把输入的数据放入二维数组;

每天成倍增长,关键在于要计算出天数(不算第一天)——每月的天数可以使用switch语句进行匹配;

不考虑起始月和结束月的天数(计算中间月份的天数),

注意

如果起始月与结束月是同一月,天数等于(结束日日期-起始日日期);

如果不是同一月,只需加上(起始月天数-起始日日期)和结束日日期;

所谓“成倍”——(昨天细菌数)+初始细菌数;

代码如下 

 1 import java.util.Scanner;
 2 
 3 public class BacteriaAmount {
 4 
 5     public static void main(String[] args) {
 6         // TODO 自动生成的方法存根
 7        //细菌繁殖
 8         Scanner scan =new Scanner(System.in);
 9         int n=scan.nextInt();
10         int [][]Data=new int[n][5];
11         for(int i=0;i<n;i++){
12             for(int j=0;j<5;j++){
13                 Data[i][j]=scan.nextInt();
14             }
15         }
16         scan.close();
17         /*数据输入完毕.
18          * Data[n][0]起始月   Data[n][1]起始日日期
19          * Data[n][2]初始细菌数
20          * Data[n][3]结束月   Data[n][4]结束日日期
21         */
22         
23         //计算出繁殖天数(未算上第一天)
24         int []days=new int[n];
25         for(int i=0;i<n;i++){
26             for(int k=Data[i][0]+1;k<Data[i][3];k++){
27                 days[i]+=howManyDays(k);
28             }
29             if(Data[i][0]==Data[i][3]){
30                 days[i]=Data[i][4]-Data[i][1];
31             }//别忘记考虑起始月和结束月同月份的情况
32             else{
33                 days[i]+=(howManyDays(Data[i][0])-Data[i][1]);
34                 days[i]+=Data[i][4];
35             }
36         }
37         
38         int []amount=new int[n];
39         for(int i=0;i<n;i++){
40             amount[i]=Data[i][2];
41             for(int k=0;k<days[i];k++){
42                 amount[i]+=Data[i][2];
43             }
44         }
45         
46         for(int i=0;i<n;i++){
47                 System.out.println(amount[i]);
48         }
49         
50     }
51     
52     static int howManyDays(int month){
53         if(1<=month&&month<=12){
54             switch(month){
55             case 1:
56             case 3:
57             case 5:
58             case 7:
59             case 9:
60             case 11:
61                 return 31;
62             case 2:
63                 return 28;
64             case 4:
65             case 6:
66             case 8:
67             case 10:
68             case 12:
69                 return 30;
70             }
71         }
72         return 0;
73     }
74     
75 }

 

以上是关于练习题 | 细菌繁殖的主要内容,如果未能解决你的问题,请参考以下文章

2712:细菌繁殖-poj

基因变异(codevs 3194)

细胞分裂结果的计算方法:分裂几次就是2的几次方,即:啥

水温空调如何手动清洗

细菌多位点序列分型(Multilocus sequence typing,MLST)的原理及分型方法

2022年传染病护理学习题