甲乙丙放鞭炮,用数组的方式

甲乙丙三人各二十个鞭炮,甲每两秒放一次,乙每三秒放一次,丙每五秒放一次。问最后能听到多少次鞭炮响

img

可以使用数组填充的方式来实现,具体思路如下:

1、首先定义一个长度为101的int数组,代表开始燃放鞭炮的时长最长为20*5=100,+1是为了方便计算;

2、再使用循环遍历这个数组,表示开始燃放鞭炮的100秒钟内,使用下标分别对2,3,5求余,如果为0,则此位置置1,表示此秒钟燃放了鞭炮,同时判断此时间是否位于甲乙丙的燃放时间内;

3、循环结束再计算出数组位置为1的个数,此个数即听到的声音的次数,默认一次燃放多个鞭炮为一次响声。

代码如下:

参考链接:




public class FirecrackersTest {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int [] maroom = new int[101]; // 定义燃放鞭炮的
        
        maroom[1]=1; //从第一秒开始燃放鞭炮,此秒置1,表示有声音
        for(int i=1;i<=maroom.length;i++) {
            
        //  因为下标1代表第一秒,所以后面计算燃放时间减去1,当分别过2秒,3秒,5秒燃放鞭炮,并且限定在各自燃时间内
            if((i-1)%2==0&&i<=2*20) {  
                maroom[i]=1;
            }
            if((i-1)%3==0&&i<=3*20) {
                    maroom[i]=1;
            }
            if((i-1)%5==0&&i<=5*20) {
                maroom[i]=1;
                
            }
        
        }
            
        int count=0;
//    System.out.print("0 ");
        for(int j=1;j<maroom.length;j++) {
            
            
//            if(j==1) {
//                for(int k=0;k<10;k++) {
//                    System.out.print((k+1)+" ");
//                }
//                //System.out.println();
//            }
                        
//            
//            if(j%10==1||j==1) {
//                System.out.println();
//                System.out.print((j/10)+" ");
//            }
//            
//            
//            System.out.print(maroom[j]+" ");
//            
        
            // 计算鞭炮声音的次数
            if(maroom[j]==1) {
                count++;
            }
    
        }
        
        System.out.println("一共听到"+count+"声!");
    
    }

}


img

最后能听到多少次鞭炮响?没时间限制那不想放的话都能放完么,要是考虑到声音重复按照一次,那按照这样试试

public static void main(String[] args) {
        // 甲乙丙三人每分钟放鞭炮的次数
        int[] counts = {30, 20, 12};
        // 甲乙丙三人放鞭炮的时间间隔
        int[] intervals = {2, 3, 5};
        // 甲乙丙三人各自已经放的鞭炮数
        int[] firecrackers = {0, 0, 0};
        // 最后能听到的鞭炮声数
        int total = 0;
        // 统计甲乙丙放鞭炮的次数
        for (int i = 0; i < 60; i++) {
            for (int j = 0; j < 3; j++) {
                if ((i + 1) % intervals[j] == 0) {
                    firecrackers[j]++;
                }
            }
        }
        // 统计最后能听到的鞭炮声数
        for (int i = 0; i < 3; i++) {
            total += counts[i] * firecrackers[i];
        }
        System.out.println("最后能听到的鞭炮声数为:" + total);
    }