文章

【GESP】C++一级练习 luogu-P1423, 小玉在游泳

GESP一级练习,循环和计算运算基础练习,难度★✮☆☆☆。

luogu-P1423

题目要求

题目描述

小玉开心的在游泳,可是她很快难过的发现,自己的力气不够,游泳好累哦。已知小玉第一步能游 $2$ 米,可是随着越来越累,力气越来越小,她接下来的每一步都只能游出上一步距离的 $98\%$。现在小玉想知道,如果要游到距离 $s$ 米的地方,她需要游多少步呢。请你编程解决这个问题。

输入格式

输入一个实数 $s$(单位:米),表示要游的目标距离。

输出格式

输出一个整数,表示小玉一共需要游多少步。

样例输入 #1

1
4.3

样例输出 #1

1
3

数据范围

数据保证,$0 \leq s < 100$,且 $s$ 小数点后最多只有一位。


题目分析

本题目要求我们根据输入的目标距离,计算小玉游泳所需的步数。根据题目描述:

  • 首先,我们需要读取输入的目标距离(单位:米),并初始化一个变量用于存储已游的总距离。
  • 接着,设定初始游泳距离为2米,并在每一步中将当前游泳距离减少到上一步的98%。
  • 在每一步中,我们将当前游泳距离累加到总距离中,并记录步数。
  • 当总距离达到或超过目标距离时,停止计算并输出所需的步数。

示例代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <cstdio>
#include <iostream>
using namespace std;
int main() {
    double n; // 目标距离
    double sum = 0; // 已游的总距离
    double last = 0; // 上一步的游泳距离
    double current = 0; // 当前步的游泳距离
    scanf("%lf", &n); // 读取目标距离
    int count = 0; // 游泳步数计数器
    while (true) {
        count++; // 增加步数计数
        if (count == 1) { // 第一步游泳距离
            current = 2.0; // 初始化当前游泳距离为2米
            sum += current; // 累加到总距离
            last = current; // 更新上一步距离
        } else { // 后续游泳距离
            current = last * 0.98; // 当前距离为上一步的98%
            sum += current; // 累加到总距离
            last = current; // 更新上一步距离
        }
        if (sum >= n) { // 如果总距离达到或超过目标距离
            break; // 退出循环
        }
    }
    printf("%d", count); // 输出所需的步数
    return 0; // 程序结束
}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

题目已加入洛谷Java、C++初学团队作业清单,可在线评测,团队名额有限,欢迎加入。

本文由作者按照 CC BY 4.0 进行授权