练习题 | 细菌繁殖

题名  细菌繁殖

问题描述

一种细菌的繁殖速度是每天成倍增长。例如:第一天有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 }

 

转载于:https://www.cnblogs.com/INGRID-ThinkDifferent-20/p/7675438.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值