[题目解析]放鞭炮

放鞭炮

时间限制: 1000 ms 空间限制: 262144 KB

题目描述

小朋友们都喜欢放鞭炮,尤其是男生在春节时,什么爆竹、摔炮还有各种烟花,玩得不亦乐乎。

今年的春节,小冲就不开心了,因为他在踢足球的时候把脚给扭伤了,现在只能躺在床上听着外面的小伙伴们放鞭炮的声音发呆,他发现,有时会有几个鞭炮同时想,有时却只有一个鞭炮想。爸爸知道小冲是个信息学竞赛爱好者,于是给他出了一个问题:有3个人同时开始放鞭炮,甲每2秒放一个,乙每3秒放一个,丙每5秒放一个,每个人都放10个鞭炮,你一共能听到多少次鞭炮响声呢?

小冲觉得这个问题太简单了,他想把程序编写得能够满足更有难度的要求:一共有n个小朋友同时开始放鞭炮,每个人放鞭炮间隔的时间不同,所放的鞭炮的数量也不同,等到大家都放完自己的鞭炮,一共能听到多少次鞭炮响声呢?小冲编写这个程序当然没问题,你能编写出来吗?

输入

第一行是一个自然数:n,表示一共有n个小朋友放鞭炮;
然后往下一共有n行,每行有两个自然数,i和j,表示这个小朋友每i秒种放一个鞭炮,一共放j个。

输出

只有一个数据:所有小朋友放完鞭炮后,小冲一共听到了多少次鞭炮的响声。

样例输入

3
2 5
3 5
5 4

样例输出

11

数据范围限制

1<=n<=100,1<=i,j<=1000。

提示

甲小朋友放完5个,乙放完5个,丙放完4个鞭炮后,小冲一共听到了11次鞭炮的响声。

思路:

我们设置几个变量:TIME数组和NUM数组分别为放鞭炮间隔的时间和鞭炮的数量,SUM和X分别为最终答案和放完鞭炮所需时间最长的人。输入就无需多言了,接下来我们要求出放完所有鞭炮所需时间最长的人和每个人放完所有鞭炮的时间,然后就是双层循环,如果有人放鞭炮的话那么T应该是他放鞭炮的时间间隔的整数倍,而且已经放掉的鞭炮数小于等于他的鞭炮数目,那么我们就SUM++,最后输出SUM。

代码:

#include<bits/stdc++.h>
using namespace std;
int main()
{
 int n,i,t;
 int time[100],num[100];//分别为放鞭炮间隔的时间和鞭炮的数量 
 int sum=0,x=0;//最终答案和放完鞭炮所需时间最长的人 
 cin>>n;//输入,无需多言 
 for(i=0;i<n;i++){
  cin>>time[i]>>num[i];
 }//输入 
 x=time[0]*num[0];//求出放完所有鞭炮所需时间最长的人 
 for(i=1;i<n;i++){//求出每个人放完所有鞭炮的时间 
  if(x<time[i]*num[i])
   x=time[i]*num[i];
 }
 for(t=0;t<x;t++){
  for(i=0;i<n;i++){
   if((t%time[i]==0)&&(t/time[i]<num[i])){//如果有人放鞭炮的话那么T应该是他放鞭炮的时间间隔的整数倍,而且已经放掉的鞭炮数小于等于他的鞭炮数目 
    sum++;
    break;
   }
  }
 }
 cout<<sum;
}

在我发的博客里可能有时候会用到一些算法,大家也可以通过下方链接购买课程补补课!👇👇👇
https://blog.csdn.net/WANG_ZIYE/article/details/106875867

posted @ 2022-03-25 20:11  zswangziye  阅读(111)  评论(0编辑  收藏  举报