【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。

输入格式

一行两个实数 s 和 x。

输出格式

输出 y 或 n。

输入输出样例

输入:

text 复制代码
14 1

输出:

text 复制代码
n

思路讲解

用 while 模拟每一秒游动:

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

参考代码

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;
}
相关推荐
huanbailu6 分钟前
Qt 跨线程信号槽:connect 返回 true 但槽函数不执行的坑
开发语言·c++·qt·信号槽·跨线程·元类型
u0111026759 分钟前
工具页案例图如何编写 alt让图片说明与处理场景对应
java·前端·javascript·图像处理·人工智能·算法·ai作画
阿狗童鞋14 分钟前
数据结构与算法实战指南
数据结构·算法
HEJOO922 分钟前
C++ 虚函数表(vtable)深度解析
开发语言·c++
Navigator_Z35 分钟前
LeetCode //C - 1275. Find Winner on a Tic Tac Toe Game
c语言·算法·leetcode
未来之窗软件服务38 分钟前
递归时间复杂度演算T (n)=aT (n/b)+f (n)-东方仙盟
算法·仙盟创梦ide·东方仙盟
垆边人似月.1 小时前
华为机考题:明明的随机数
数据结构·算法·华为
xailorliu1 小时前
矩阵定性-正定负定不定半正定半负定
c++·opencv·线性代数·计算机视觉·矩阵
Doubbbbbbble云2 小时前
多维空间索引结构R树与KD树性能对比研究4
算法
海上小飞龙2 小时前
【KMP算法-中篇】next 数组的递推:往前填一位,靠的是往回退几步
算法