【深入浅出程序设计竞赛】:再分肥宅水、小鱼的游泳时间

78 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 21 天,点击查看活动详情

再分肥宅水

例2-8 再分肥宅水(洛谷 P5706)。

现在有 tt 毫升肥宅快乐水,要均分给 nn 名同学。每名同学需要两个杯子。想知道每名同学可以获得多少毫升饮料(严格精确到小数点后 3 位),以及一共需要多少个杯子。输人一个实数 tt 和一个整数 nn ,使用空格隔开。输出两个数字表示答案使用换行隔开。

代码如下:

#include <cstdio>
using namespace std;
​
int main() {
    double t;
    int n;
    scanf("%lf%d", &t, &n);
    printf("%.3f\n%d", t / n, n * 2);
    return 0;
}

运行结果:

1000
3
333.333
6

记录:

  • scanf() 函数中,%lf表示接收一个 double 类型的占位符,而 %d 则表示接收一个 int 类型的占位符;此时,计算机就会期望读取到 "[一个浮点数][一个整数]"这样格式的输入数据。注意,这两个数需要被分隔开(空格或换行)才能被正确读入。
  • printf() 函数中,该函数会输出格式为"[保留到小数点后3位的数字][换行符][整数]"的字符串。这里第一个占位符的数据由 t / n 提供,第二个占位符的数据由 n * 2 提供。如果 \n 包含在一个字符串里面,则表示一个换行符。

一般来说,输出 double 或者 float 都应该使用 %f

当然,我们也可以使用 cout 来输出数据,只要配合 fixedsetprecision() 就可以达到保留指定位数小数的效果。

一般来说,使用 scanf() 读入同样数据的速度要快于 cin ,特别是当数据量足够多时(百万级别),此时差距会相当明显。

小鱼的游泳时间

题目描述:

伦敦奥运会要到了,小鱼在拼命练习游泳准备参加游泳比赛,可怜的小鱼并不知道鱼类是不能参加人类的奥运会的。

这一天,小鱼给自己的游泳时间做了精确的计时(本题中的计时都按 2424 小时制计算),它发现自己从 aabb 分一直游泳到当天的 ccdd 分,请你帮小鱼计算一下,它这天一共游了多少时间呢?

小鱼游的好辛苦呀,你可不要算错了哦。

  • 输入格式

一行内输入四个整数,以空格隔开,分别表示题目中的 a,b,c,da, b, c, d

  • 输出格式

一行内输出两个整数 eeff,用空格间隔,依次表示小鱼这天一共游了多少小时多少分钟。其中表示分钟的整数 ff 应该小于 6060

  • 样例输入
12 50 19 10
  • 样例输出
6 20
  • 提示

对于全部测试数据,0a,c240\le a,c \le 240b,d600\le b,d \le 60,且结束时间一定晚于开始时间。

  • 解题代码如下:
#include <bits/stdc++.h>
using namespace std;

int main() {
    int a, b, c, d, e, f, interval;
    scanf("%d%d%d%d", &a, &b, &c, &d);
    interval = (60*c+d) - (60*a+b);
    e = interval / 60;
    f = interval % 60;
    printf("%d %d", e, f);
    return 0;
}