Problem A: Average Speed

Problem A: Average Speed

时间: 1ms        内存:128M

描述:

Problem A: Average Speed

You have bought a car in order to drive from Waterloo to a big city. The odometer on their car is broken, so you cannot measure distance. But the speedometer and cruise control both work, so the car can maintain a constant speed which can be adjusted from time to time in response to speed limits, traffic jams, and border queues. You have a stopwatch and note the elapsed time every time the speed changes. From time to time you wonder, "how far have I come?". To solve this problem you must write a program to run on your laptop computer in the passenger seat.

Standard input contains several lines of input: Each speed change is indicated by a line specifying the elapsed time since the beginning of the trip (hh:mm:ss), followed by the new speed in km/h. Each query is indicated by a line containing the elapsed time. At the outset of the trip the car is stationary. Elapsed times are given in non-decreasing order and there is at most one speed change at any given time.

For each query in standard input, you should print a line giving the time and the distance travelled, in the format below.

输入:

输出:

示例输入:

00:00:01 100
00:15:01
00:30:01
01:00:01 50
03:00:01
03:00:05 140

示例输出:

00:15:01 25.00 km
00:30:01 50.00 km
03:00:01 200.00 km

提示:

参考答案(内存最优[920]):

#include <stdio.h>

main(){
   int hh, mm, ss, speed=0, newspeed, i, j, k, n, time = 0, now;
   char buf[10000];
   double dist = 0;

   while (gets(buf)) {
      n = sscanf(buf,"%d:%d:%d %d",&hh,&mm,&ss,&newspeed);
      now = hh*3600 + mm*60 + ss;
      dist += (now - time) / 3600. * speed;
      time = now;
      if (n == 3) printf("%02d:%02d:%02d %0.2lf km\n",hh,mm,ss,dist);
      else if (n == 4) speed = newspeed;
      else printf("oops!\n");
   }
}

参考答案(时间最优[0]):

#include <stdio.h>

main(){
   int hh, mm, ss, speed=0, newspeed, i, j, k, n, time = 0, now;
   char buf[10000];
   double dist = 0;

   while (gets(buf)) {
      n = sscanf(buf,"%d:%d:%d %d",&hh,&mm,&ss,&newspeed);
      now = hh*3600 + mm*60 + ss;
      dist += (now - time) / 3600. * speed;
      time = now;
      if (n == 3) printf("%02d:%02d:%02d %0.2lf km\n",hh,mm,ss,dist);
      else if (n == 4) speed = newspeed;
      else printf("oops!\n");
   }
}

题目和答案均来自于互联网,仅供参考,如有问题请联系管理员修改或删除。

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注