-
2705:跳绳游戏
总时间限制:
-
1000ms
内存限制:
-
65536kB
描述
-
小朋友玩跳绳比赛,要计算在一分钟内跳了多少下.假设每秒钟跳一下,如果中途失败了,则要花三秒钟后才能开始重跳.一般小朋友跳绳一分钟要跳坏好几次.现在给出小朋友每次跳坏时已经跳的总数,求小朋友在一分钟内跳了多少下.(
请注意分析示例数据.)
输入
-
第一行为n个小朋友
其余各行,每行第一个整数是跳坏的次数m,其余m个整数是跳坏时累计跳了多少下.
输出
-
输出相应小朋友头一分钟内跳了多少下.
样例输入
-
6
0
3 12 23 45
1 17
4 10 20 30 40
5 10 20 30 40 58
6 10 20 30 40 47 60
样例输出
-
60
51
57
48
48
47
提示
-
提示,在跳绳比赛时,你可能已经超时了,但自己还在计数,但裁判已经停止计时并得到成绩了.这里相当与自己计数.因此,并非跳坏的时候都是在前一分钟以内.请注意分析示例数据.
-
-
-
这个题比较坑.....需要注意的情况很多,不但要考虑每次停下来跳了多少,还要考虑跳了多少次.....
-
具体看代码注释.....
第一次做的,各种情况都考虑了,有点复杂.....
-
-
#include<stdio.h>
int main()
{
int n,m,x,i,ok,time,s;
scanf("%d",&n);
while(n--)
{
time=ok=s=0;
scanf("%d",&m);
if(m==0)//特判未停的情况
{
s=60;
}
else
{
for(i=0;i<m;++i)
{
scanf("%d",&x);
time=x+3*i;
if(ok==0)
{
if(time>=60)//超时了
{
ok=1;s=60-3*i;
}
else if(time>=57)//时间不够下次重新开始了
{
ok=1;
s=time-3*i;
}
else if(time<57&&i==m-1)//最后一次停下来的时候,还没超时.....
{
s=60-3*(i+1);
}
}
}
}
printf("%d\n",s);
}
return 0;
}
-
然后把情况相同的合并了一下,比那个简化了点.......
-
-
#include<stdio.h>
int main()
{
int n,m,x,i,ok,time,s;
scanf("%d",&n);
while(n--)
{
time=ok=s=0;
scanf("%d",&m);
for(i=0;i<m;++i)
{
scanf("%d",&x);
time=x+3*i;//每次停下来后已经用的时间
if(ok==0)//未超过一分钟...
{
if(time>=57)
{
ok=1;
time=(time>60)?60:time;//最多跳60次
s=time-3*i;
//剩余的时间不够下一次重新跳了
//跳的次数等于用的时间减去停下来消耗的时间
}
else if(time<57&&i==m-1)
//最后一次停下来,但是不够60s
{
s=60-3*(i+1);
//这一次后面肯定还要有三秒停下来的时间
}
}
}
printf("%d\n",(m==0)?60:s);//特判未停下来的情况
}
return 0;
}
-
2705:跳绳游戏
- 1000ms 内存限制:
- 65536kB
- 小朋友玩跳绳比赛,要计算在一分钟内跳了多少下.假设每秒钟跳一下,如果中途失败了,则要花三秒钟后才能开始重跳.一般小朋友跳绳一分钟要跳坏好几次.现在给出小朋友每次跳坏时已经跳的总数,求小朋友在一分钟内跳了多少下.( 请注意分析示例数据.) 输入
-
第一行为n个小朋友
其余各行,每行第一个整数是跳坏的次数m,其余m个整数是跳坏时累计跳了多少下.
输出
- 输出相应小朋友头一分钟内跳了多少下. 样例输入
-
6 0 3 12 23 45 1 17 4 10 20 30 40 5 10 20 30 40 58 6 10 20 30 40 47 60
样例输出
-
60 51 57 48 48 47
提示
- 提示,在跳绳比赛时,你可能已经超时了,但自己还在计数,但裁判已经停止计时并得到成绩了.这里相当与自己计数.因此,并非跳坏的时候都是在前一分钟以内.请注意分析示例数据.
-
-
- 这个题比较坑.....需要注意的情况很多,不但要考虑每次停下来跳了多少,还要考虑跳了多少次.....
-
具体看代码注释.....
-
总时间限制:
-
描述
-
-
#include<stdio.h> int main() { int n,m,x,i,ok,time,s; scanf("%d",&n); while(n--) { time=ok=s=0; scanf("%d",&m); if(m==0)//特判未停的情况 { s=60; } else { for(i=0;i<m;++i) { scanf("%d",&x); time=x+3*i; if(ok==0) { if(time>=60)//超时了 { ok=1;s=60-3*i; } else if(time>=57)//时间不够下次重新开始了 { ok=1; s=time-3*i; } else if(time<57&&i==m-1)//最后一次停下来的时候,还没超时..... { s=60-3*(i+1); } } } } printf("%d\n",s); } return 0; }
- 然后把情况相同的合并了一下,比那个简化了点.......
-
-
#include<stdio.h> int main() { int n,m,x,i,ok,time,s; scanf("%d",&n); while(n--) { time=ok=s=0; scanf("%d",&m); for(i=0;i<m;++i) { scanf("%d",&x); time=x+3*i;//每次停下来后已经用的时间 if(ok==0)//未超过一分钟... { if(time>=57) { ok=1; time=(time>60)?60:time;//最多跳60次 s=time-3*i; //剩余的时间不够下一次重新跳了 //跳的次数等于用的时间减去停下来消耗的时间 } else if(time<57&&i==m-1) //最后一次停下来,但是不够60s { s=60-3*(i+1); //这一次后面肯定还要有三秒停下来的时间 } } } printf("%d\n",(m==0)?60:s);//特判未停下来的情况 } return 0; }