百练-2705:跳绳游戏

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

提示

提示,在跳绳比赛时,你可能已经超时了,但自己还在计数,但裁判已经停止计时并得到成绩了.这里相当与自己计数.因此,并非跳坏的时候都是在前一分钟以内.请注意分析示例数据

解题思路:

1、  每次跳坏时跳的次数,加上跳坏的总时间就是总共需要的时间,如果不超过60秒,则跳的总数是(60-调坏的总时间)

2、  如果超过60秒则需要分两种情况。

3、  一种是:调坏后,还有不到三秒的时间已经不够下一次跳,一种是:还可以继续跳绳。

4、  所以输出结果有不同。

程序代码:

#include<stdio.h>

#include<malloc.h>

int main()

{

    int *b,n,m,i,j,k,t;

    while(scanf("%d",&n)!=EOF)

    {

     for(i=0;i<n;i++)

     {

      scanf("%d",&m);

      m=m+1;

      b=(int*)malloc(sizeof(int)*m);

      for(j=1;j<m;j++)

       scanf("%d",&b[j]);

      for(j=1,k=0;j<=m;j++)

       {

         k=j*3+b[j];

         if(k>60)          //判断跳的时间是否超过60秒

         break;

       }

      //printf("%d ",j);

       if(j>m-1)

       printf("%d ",60-3*(m-1));      //没有超过60秒的

       else

       {

         t=60-3*(j-1);

         if(t<b[j])                     //判断调坏之后的时间是否还够下一次在跳的时间(3秒)。

          printf("%d ",t);

          else

          printf("%d ",b[j]);

        }

     }

     free(b);

    }

    return 0;

}

原文地址:https://www.cnblogs.com/zhouhongweihpu/p/3225223.html