PTA基础编程题目集 7-17爬动的蠕虫(C++语言实现)
2026/8/7 7:32:29 网站建设 项目流程

摘要:本文是PTA编程题"爬动的蠕虫"的题解,涵盖题目描述、输入输出格式及C++语言实现,展示模拟循环算法。

题目描述

一条蠕虫长1寸,在一口深为N寸的井的底部。已知蠕虫每1分钟可以向上爬U寸,但必须休息1分钟才能接着往上爬。在休息的过程中,蠕虫又下滑了D寸。就这样,上爬和下滑重复进行。请问,蠕虫需要多长时间才能爬出井?

这里要求不足1分钟按1分钟计,并且假定只要在某次上爬过程中蠕虫的头部到达了井的顶部,那么蠕虫就完成任务了。初始时,蠕虫是趴在井底的(即高度为0)。

输入格式:

输入在一行中顺序给出3个正整数N、U、D,其中D<U,N不超过100。

输出格式:

在一行中输出蠕虫爬出井的时间,以分钟为单位。

输入样例:

12 3 1

输出样例:

11

解题思路

  • 核心问题分析:蠕虫交替进行上爬(1分钟上升U寸)和休息(1分钟下滑D寸),需要计算爬出井所需的总时间。关键在于:上爬过程中若到达或超过井口即完成,不需要再下滑。
  • 算法原理说明:使用模拟法,通过无限循环交替执行上爬和休息两个阶段。每次上爬后立即检查是否爬出,若已爬出则退出循环;否则进入休息阶段下滑。时间在每个阶段分别累加。
  • 具体计算步骤
    1. 初始化高度height=0,时间time=0
    2. 进入循环:
      • 上爬阶段:time+1,height+U,若height≥N则结束
      • 休息阶段:time+1,height-D
    3. 重复步骤2直到爬出井
    4. 输出总时间time

代码流程说明

  1. 引入头文件与命名空间(第1-2行):引入iostream头文件,使用std命名空间。
  2. 变量声明与输入(第5-7行):定义井深N、上爬距离U、下滑距离D、时间time(初始0)、当前高度height(初始0);读取输入的N、U、D。
  3. 模拟循环(第9-19行):
    • while(1)进入无限循环
    • 上爬阶段:time自增1分钟,height增加U寸
    • 判断height≥N:若成立则break退出循环(已爬出)
    • 休息阶段:time自增1分钟,height减少D寸(下滑)
  4. 输出与返回(第21-22行):输出总时间time,返回0表示程序正常结束。

代码流程图

开始

声明变量N,U,D,time=0,height=0

读取N,U,D

进入无限循环while(1)

time++ 上爬1分钟

height += U 上爬U寸

height >= N?

break 退出循环

time++ 休息1分钟

height -= D 下滑D寸

输出time

返回0,结束

解题流程图

理解题意

输入N井深,U上爬距离,D下滑距离

初始化height=0,time=0

蠕虫开始上爬

时间+1分钟

高度+U寸

到达井口?

输出总时间

开始休息

时间+1分钟

高度-D寸

仍在井底?

继续循环

代码部分实现

#include<iostream>usingnamespacestd;intmain(void){intN,U,D,time=0,height=0;// N为井深,U为上爬距离,D为下滑距离,time为时间,height为当前高度cin>>N>>U>>D;// 读取井深N、上爬距离U、下滑距离Dwhile(1){// 无限循环,直到蠕虫爬出井time++;// 时间加1分钟height+=U;// 蠕虫上爬U寸if(height>=N){// 判断是否到达或超过井口break;// 爬出井,退出循环}time++;// 休息1分钟,时间加1height-=D;// 休息期间下滑D寸}cout<<time<<endl;// 输出爬出井的总时间return0;}

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询