用数组来解决看似很复杂的礼炮问题

  此次的问题为:有三门大炮A、B、C同是开炮,A每隔五秒开一发,B每隔六秒开一发,C每隔七秒开一发,每门炮有21发炮弹。现有一观众在现场,问他一共能听到几声炮响。

面对这道题我没一般想到用三个数组来保存每门炮响的时刻,然后去除重复响的次数最终剩下的就为听到的次数。

现提供一种思路,只用一个数组且只遍历一次就将结果得出。

代码为:

# include<stdio.h>
void main()
{
 int arr[174]={0};
 for(int i=0;i<21;i++)
 {
  arr[5*i]=1;
  arr[6*i]=1;
  arr[7*i]=1;
 }
 int count=0;
 for(int i=0;i<147;i++)
 {
  if(arr[i]==1)
  {
   count++;
  }
 }
 ("%d\n",count);
}

代码很简单,但思路却很巧妙。定义一个为总的开炮所需时间长度的数组(此时不考虑重复)元素初始化为0,然后将每门大炮发出响声时的时刻所对应的数组元素值赋为1,最后将不为零的元素输出,用count记下个数,最后count就为听到炮响的次数。

虽然参考引用中未直接提及CSS礼炮动画,但可以基于其中动画相关内容的思路来推测实现方法。通常CSS实现动画会借助关键帧`@keyframes`以及元素的属性变化。 ### 实现方法 1. **定义元素样式**:为礼炮元素设置初始的宽度、高度、背景等样式。 2. **创建关键帧动画**:使用`@keyframes`定义礼炮动画的各个阶段,包括礼炮发射、爆炸等效果。 3. **应用动画**:将定义好的动画应用到礼炮元素上,设置动画的持续时间、播放次数等属性。 ### 示例代码 ```css /* 定义礼炮元素样式 */ .cannon { width: 20px; height: 80px; background-color: #333; position: relative; bottom: 0; left: 50%; transform: translateX(-50%); } /* 定义礼炮发射动画 */ @keyframes cannonLaunch { 0% { bottom: 0; transform: translateX(-50%) rotate(0deg); } 50% { bottom: 200px; transform: translateX(-50%) rotate(30deg); } 100% { bottom: 400px; transform: translateX(-50%) rotate(60deg); } } /* 定义礼炮爆炸动画 */ @keyframes cannonExplode { 0% { width: 20px; height: 20px; background-color: #ff0; opacity: 1; } 100% { width: 100px; height: 100px; background-color: #f00; opacity: 0; } } /* 应用动画 */ .cannon.launch { animation: cannonLaunch 2s ease-in-out; } .cannon.explode { animation: cannonExplode 1s ease-in-out; } ``` ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="styles.css"> <title>CSS礼炮动画</title> </head> <body> <div class="cannon launch explode"></div> </body> </html> ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值