【C++】while语句例题专题

while语句例题专题


一、语法

while 循环适合"循环次数不提前固定"的场景。

基本语法:

cpp 复制代码
while (条件) {
    循环体;
}

示例:输出 1 到 5

cpp 复制代码
int i = 1;
while (i <= 5) {
    cout << i << " ";
    i++;
}

二、例题详解

例题1:小鱼会有危险吗

题目描述

小鱼从 A 点向右游,第一秒游 7 米,之后每秒游程变为上一秒的 98%

探测器中心在 s 米处,左右 x 米为探测范围。

若小鱼进入探测范围后,下一秒不能游出范围则危险,输出 y;否则输出 n

输入格式

一行两个实数 sx

输出格式

输出 yn

输入输出样例

输入:

text 复制代码
14 1

输出:

text 复制代码
n

思路讲解

while 模拟每一秒游动:

  1. n 记录已经游过的总距离,y 记录当前这一秒能游的距离;
  2. n < s - x 时,说明还没进入探测范围左边界,继续模拟;
  3. 到达边界后,判断"下一秒结束时"是否还能留在范围内;
  4. 依据判断输出 yn

参考代码

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;

int main() {
  float s, x, n, y;
  cin >> s >> x;
  n = 0;
  y = 7;
  while (n < s - x) {
    n += y;
    y = y * 0.98;
  }
  if (n + y > s + x) {
    cout << 'n';
  } else {
    cout << 'y';
  }
  return 0;
}

例题2:级数求和

题目描述

S_n = 1 + 1/2 + 1/3 + ... + 1/n

输入整数 k,求最小的 n,使得 S_n > k

输入格式

一个正整数 k

输出格式

一个正整数 n

输入输出样例

输入:

text 复制代码
1

输出:

text 复制代码
2

思路讲解

这是 while 的经典"循环到满足条件为止"模型:

  1. sum 初始为 0,i 从 1 开始;
  2. 每轮把 1.0 / i 加到 sum
  3. sum > k 时停止,并输出当前 i

参考代码

cpp 复制代码
#include <iostream>
using namespace std;

int main(){
    int k;
    cin >> k;
    double sum = 0.0;
    int i = 1;
    while(1){
        sum += (1.0/i) ;
        if(sum > k){
            cout << i << endl;
            break;
        }
        i++;
    }
    return 0;
}

例题3:一尺之棰

题目描述

第一天木棍长度为 a,从第二天起每天长度变为前一天的一半(向下取整)。

问第几天长度会变为 1

输入格式

一个正整数 a

输出格式

一个正整数,表示第几天变为 1

输入输出样例

输入:

text 复制代码
100

输出:

text 复制代码
7

思路讲解

每天都做同一件事:a /= 2,直到 a == 1

因此用 while (a > 1) 循环最直观,循环次数就是多经历的天数。

参考代码

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int main() {
  int a;
  cin >> a;
  int d = 1;
  while (a > 1) {
    d++;
    a /= 2;
  }
  cout << d;
  return 0;
}
相关推荐
辰烨chenye16 分钟前
LeetCode Hot 100 题解 · 动态规划篇
算法·leetcode·动态规划
会周易的程序员25 分钟前
aiDgeController软PLC控制通讯协议文档
c++·物联网·网关·iot·ipc·进程间通讯
青山木34 分钟前
Hot 100 --- 买卖股票的最佳时机
java·数据结构·算法·leetcode·贪心算法
wlkdb41 分钟前
大模型/Agent 时代下的视觉算法
图像处理·算法·计算机视觉
sali-tec1 小时前
C# 基于OpenCv的视觉工作流-章107-光流追踪
图像处理·人工智能·opencv·算法·计算机视觉
(Charon)1 小时前
【C++】网络缓冲区设计(四):epoll + Reactor中Buffer的完整读写流程
开发语言·c++
csdn_aspnet2 小时前
C++ 未排序数组中第 k 个最小/最大元素 | 最坏情况下的线性时间
数据结构·c++·算法
phltxy11 小时前
C语言操作符详解
java·c语言·算法
RuoZoe11 小时前
从 2026 年 3 月 1 日开源,到 26.10.9:Jalium UI 半年时间到底走了多远?
c语言·c++
aqiu11111111 小时前
【LeetCode 902】最大为 N 的数字组合 - 详细题解与数位组合思路
数据结构·算法·leetcode·蓝桥杯·数位dp