【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;
}
相关推荐
饼饼学习空间智能11 小时前
家庭服务机器人训练数据怎么积累?仿真、真实采集与持续学习的技术路线分析
人工智能·算法·机器学习
不可求~11 小时前
C++ std::string_view 不是字符串:从悬空引用到安全用法
java·开发语言·c++
en.en..12 小时前
数据结构考点解析:逻辑闭环与存储循环辨析
数据结构
小小龙学IT12 小时前
C++ 正则表达式完全指南:从 std::regex 实战到 RE2 引擎原理(NFA/DFA/回溯陷阱)
c++·正则表达式
蛋先生DX12 小时前
你瘦不下来但大模型可以:量化原理了解一下
深度学习·算法·llm
(╹◡╹)14 小时前
18.剪枝
算法·机器学习·剪枝
布莱克60514 小时前
数据库索引分类:数据结构、物理存储与逻辑角度详解
数据结构·数据库
Fa_Mian_Tuan15 小时前
图论基础|邻接矩阵超详细讲解(含无向/有向/带权图+完整可运行C语言代码)
c语言·数据结构·笔记·算法·图论
hanhahai15 小时前
指针与函数(函数指针与指针函数)
算法
码匠许师傅15 小时前
【C++ 面试真题】聊聊 C++ 的序列容器
java·c++·面试