甲乙丙三人各二十个鞭炮,甲每两秒放一次,乙每三秒放一次,丙每五秒放一次。问最后能听到多少次鞭炮响
可以使用数组填充的方式来实现,具体思路如下:
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+"声!");
}
}
最后能听到多少次鞭炮响?没时间限制那不想放的话都能放完么,要是考虑到声音重复按照一次,那按照这样试试
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);
}