【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;
}
相关推荐
用户805533698031 小时前
现代Qt开发教程(新手篇)1.11——定时器
c++·qt
澈2071 小时前
STL迭代器:容器遍历的万能钥匙
开发语言·c++
灵智实验室1 小时前
PX4位置速度估计技术详解(四):LPE 激光雷达高度融合的实现错误
算法·无人机·px 4
azoo1 小时前
emplace_back和push_back() 函数添加 cv::Point 类型数据
c++·opencv
CQU_JIAKE2 小时前
【A】3742,3387,并查集
算法
gihigo19982 小时前
CHAN时延估计算法(二维/三维定位实现)
算法
freexyn2 小时前
Matlab自学笔记七十六:表达式的展开、因式分解、化简、合并同类项
笔记·算法·matlab
样例过了就是过了2 小时前
LeetCode热题 不同路径
c++·算法·leetcode·动态规划
dog2502 小时前
圆锥曲线和二次曲线
开发语言·网络·人工智能·算法·php