当前位置:   article > 正文

关于模拟算法的一些题目_交通灯的状态经过红灯、黄灯和绿灯为一个周期,假设在每一个周期中绿灯时间为3

交通灯的状态经过红灯、黄灯和绿灯为一个周期,假设在每一个周期中绿灯时间为3

1.软件版本

相信大家一定有过在网上下载软件而碰到多个不同版本的情况。一般来说,软件的版本号由三个部分组成,主版本号(Major Version Number),子版本号(Minor Version Number)和修订号(Revision_Number)。当软件进行了重大的修改时,主版本号加一;当软件在原有基础上增加部分功能时,主版本号不变,子版本号加一;当软件仅仅修正了部分bug时,主版本号和子版本号都不变,修正号加一。
在我们比较软件的两个版本的新旧时,都是先比较主版本号,当主版本号相同时再比较子版本号,前两者都相同的情况下再比较修正号。版本号越大的软件越新。
现在,小明在下载软件的时候碰到了两个版本,请你告诉他哪个版本更新一些。

输入格式

输入的第一行有一个整数T,代表有T组测试。 

接下来有T组测试。
每组测试分两行,第一行有三个整数代表第一个软件版本的主版本号,子版本号和修订号。第二行也有三个整数代表第二个软件版本的主版本号,子版本号和修订号。
数据中出现的整数都在[0,1000]范围之内。

输出格式

对于每组测试,如果第一个软件的版本新点,请输出First,如果第二个软件的版本新点,请输出Second,否则输出Same。

输入/输出例子1

输入:

3

1 1 0

1 1 1

1 1 1

1 1 0

1 1 1

1 1 1

输出:

Second

First

Same

代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. struct node
  4. {
  5. int x,y;
  6. }a[10005];
  7. int n;
  8. int main(){
  9. cin>>n;
  10. for(int i=0;i<n;i++)
  11. {
  12. bool f=false;
  13. for(int j=0;j<3;j++)cin>>a[j].x;
  14. for(int j=0;j<3;j++)cin>>a[j].y;
  15. for(int j=0;j<3;j++)
  16. {
  17. if(a[j].x>a[j].y){cout<<"First";f=true;break;}
  18. else if(a[j].x<a[j].y){cout<<"Second";f=true;break;}
  19. }
  20. if(f==false)cout<<"Same";
  21. cout<<"\n";
  22. }
  23. return 0;
  24. }

2.勇士

小明在学习信息学编程时,设计了一款游戏:初始时勇士的能力值为n,通往城堡的路上有m个挑战者,第i个挑战者的能力值为a[i]。勇士只能按照顺序依次迎战挑战者。当勇士的能力值大于等于挑战者时,视为勇士胜利,可以继续迎战下一位,否则视为失败,游戏直接结束。现在请你找出勇士在失败或全部通关后,他击败的挑战者里最强那位的能力值是多少。若一个都无法击败,则输出0。

输入格式

第一行,两个整数n和m。

第二行,m个整数,第i个整数为第i个挑战者的能力值a[i]。

输出格式

输出一个整数,为勇士在失败或全部通关后,他击败的挑战者里最强那位的能力值。

输入/输出例子1

输入:

100 4

98 77 123 56

输出:

98

输入/输出例子2

输入:

130 4

98 77 123 56

输出:

123

样例解释

【样例说明】

样例1中,勇士的能力值是100,共有4位挑战者,能力值分别为98、77、123、56。勇士能够击败第1、2位挑战者,但无法击败第3位,因此在他击败的挑战者里,最强那位的能力值是98。

样例2中,勇士的能力值是130,共有4位挑战者,能力值分别为98、77、123、56。勇士能够击败所有的挑战者,因此在他击败的挑战者里,最强那位的能力值是123。

【数据范围】

对于100%的数据,1≤n,m,a[i]≤10000。

代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int m,n,a,maxx;
  4. int main(){
  5. cin>>n>>m;
  6. for(int i=0;i<m;i++)
  7. {
  8. cin>>a;
  9. if(a>n)break;
  10. else if(a<=n){if(a>maxx)maxx=a;}
  11. }
  12. cout<<maxx;
  13. return 0;
  14. }

3.交通灯

城市道路的交叉路口通常设置有绿灯、黄灯和红灯三种状态的交通灯,它们的作用是:当绿灯亮时,表示车辆可通行;当黄灯亮时,提醒正在交叉路口中行驶的车辆赶快离开;当红灯亮,车辆要在停车线后停驶。

交通灯的状态经过红灯、黄灯和绿灯为一个周期,假设在每一周期中绿灯时间为30秒,红灯时间为20秒,路口上车辆的疏通速度是0.6辆/秒。(黄灯时间一般很短这里忽略不计)

交警队长需要你帮忙计算出第n个周期后滞留下来的车辆数量,以便采取更有效的措施改进交通状况。

输入格式

共有n+2行:

第1行为要计算滞留车辆数的周期n;

第2行为第1周期开始时由前一周期滞留下来的车辆数;

第3至n+2行分别为第1至n周期的车辆到达数。每行有两个数,第1个为红灯时的车辆到达数,第2个为的绿灯时的车辆到达数。

以上所有输入数据均为[0,100]。

输出格式

只有一个数:经过第n周期后,滞留下来的车辆数。

输入/输出例子1

输入:

1

2

3 5

输出:

0

输入/输出例子2

输入:

2

5

8 12

6 9

输出:

4

代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n,m,sum;
  4. int main(){
  5. cin>>n>>m;
  6. sum=m;
  7. for(int i=0;i<n;i++)
  8. {
  9. int a,b;
  10. cin>>a>>b;
  11. sum+=a+b;
  12. if(sum<=18)sum=0;
  13. else sum-=18;
  14. }
  15. cout<<sum;
  16. return 0;
  17. }

4.挂盐水

挂盐水的时候,如果滴起来有规律,先是滴一滴,停一下;然后滴二滴,停一下;再滴三滴,停一下...,现在有一个问题:这瓶盐水一共有VUL毫升,每一滴是D毫升,每一滴的速度是一秒(假设最后一滴不到D毫升,则花费的时间也算一秒),停一下的时间也是一秒这瓶水什么时候能挂完呢?

输入格式

输入数据包含多个测试实例,每个实例占一行,由VUL和D组成,其中 0<D<VUL<5000。

输出格式

对于每组测试数据,请输出挂完盐水需要的时间,每个实例的输出占一行。

输入/输出例子1

输入:

10 1

输出:

13

代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. int n,m,sum;
  4. int main(){
  5. cin>>n>>m;
  6. for(int i=1;;i++)
  7. {
  8. for(int j=1;j<=i;j++)
  9. {
  10. sum++;
  11. n-=m;
  12. if(n<=0)
  13. {
  14. cout<<sum;
  15. return 0;
  16. }
  17. }
  18. sum++;
  19. }
  20. }

5.奇怪的球

文景收到了N(1≤N≤4×10^5)个奇怪的球,球摆成一列,每个球的表面都写着一个数字,第i个球的表面数字是a[i](2≤a[i]≤4×10^5)。

文景准备将所有的球从1到N依次放入桶中。桶是圆柱形的,底面是封死的,只能从圆柱形顶端放入。桶比较窄,桶中的球只能全部竖着叠放。

文景在放球的过程中,奇怪的事情发生了,如果桶中有连续x个值为x的球,这些球将会消失。

请你帮助文景计算出,从1到N依次放入每个球后,桶中的球有多少个?

输入格式

第一行一个正整数N;

第二行N个正整数,从1到N依次表示每个球表面的数字。

【时间限制、数据范围及描述】:

时间:1s 空间:256M

对于30%的数据:1≤N≤10^4;2≤a[i]≤100;

对于100%的数据:1≤N≤4×10^5;2≤a[i]≤4×10^5;

输出格式

输出N行,每行一个整数,第i行表示放完第i个球后桶中球的个数。

输入/输出例子1

输入:

5

3 2 3 2 2

输出:

1

2

3

4

3

输入/输出例子2

输入:

10

2 3 2 3 3 3 2 3 3 2

输出:

1

2

3

4

5

3

2

3

1

0

样例解释

考虑样例1:

第1个球放入后,桶中球从下至上依次为:3

第2个球放入后,桶中球从下至上依次为:3 2

第3个球放入后,桶中球从下至上依次为:3 2 3

第4个球放入后,桶中球从下至上依次为:3 2 3 2

第5个球放入后,桶中球从下至上依次为:3 2 3

代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. long long a[400005],n,t=1,s[400005];
  4. int main(){
  5. scanf("%d",&n);
  6. for(int i=1;i<=n;i++)
  7. {
  8. scanf("%d",&a[t]);
  9. if(a[t]==a[t-1])s[t]=s[t-1]+1;
  10. else s[t]=1;
  11. if(a[t]==s[t])t=t-s[t];
  12. printf("%d\n",t);
  13. t++;
  14. }
  15. return 0;
  16. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/菜鸟追梦旅行/article/detail/536430?site
推荐阅读
相关标签
  

闽ICP备14008679号