全国青少年信息学奥林匹克竞赛(信奥赛)备考实战之循环结构(while循环应用)

在 C++ 编程的世界里,循环结构是掌控程序流程的关键工具之一,而while循环更是其中的经典。它就像一个不知疲倦的小卫士,只要条件满足,就会持续执行特定的代码块,可以解决诸多复杂的编程任务。本文就一同深入探索while循环的精彩应用。

一、基础语法回顾

while循环的基本语法形式简洁明了:


while (条件表达式) {// 循环体,包含需要重复执行的代码
}

当程序运行到while语句时,首先会对 “条件表达式” 进行求值。若结果为true(在 C++ 中,非零值即为true),则进入循环体执行其中的代码;执行完毕后,再次回到条件表达式处进行判断,如此往复,直到条件表达式的值变为false,此时程序跳出while循环,继续往后执行其他代码。

二、常见应用场景

实战训练1—分离整数的各个数位

问题描述:

给定一个整数 n(1≤n≤100000000),要求从个位开始分离出它的每一位数字。从个位开始按照从低位到高位的顺序依次输出每一位数字。

输入格式:

一行一个整数,输入一个整数n,整数n在1到100000000 之间。

输出格式:

一行,从个位开始按照从低位到高位的顺序依次输出每一位数字。数字之间以一个空格分开。

输入输出样例:

输入样例1

输出样例1

12345

5 4 3 2 1

输入样例2

输出样例2

985211

1 1 2 5 8 9

问题分析:

根据题意,要从个位开始分离出整数的每一位数字,可以利用取模运算%和整除运算/的特性。对于输入的整数n,对n进行求模运算可以得到个位数字,例如对于数字123,123%10的结果是3,这就是想要分离出的个位数字;在得到个位数字并输出后,为了继续分离下一位数字,需要将 n 更新为去掉当前个位数字的新数字,这可以通过整除运算来实现,例如对于数字 123,在输出 3 后,将 n 更新为 123 / 10,结果是 12,这样就可以继续分离下一位数字。重复上述过程,直到 n 为 0,此时表示已经将所有位的数字都分离并输出。由于并不知道n的位数,所以使用while循环来实现,条件表达式为n>0,循环体为取模运算和整除赋值运算,并输出取模运算的结果。具体程序代码如下所示:


#include<bits/stdc++.h>
using namespace std;
int main(){int n;//定义一个整数n cin>>n;//输入整数n的值 while(n>0){//只要n不等于0,就执行循环体 cout<<n%10<<" ";//首先输入最低位数,最低位数为n对10取模运算 ,并输出最低位数 n = n/10;//将n除以10之后重新赋值给n }return 0;
}

实战训练2—数字统计问题

问题描述:

请统计某个给定范围[L,R] 的所有整数中,数字2出现的次数。比如给定范围 [2,22],数字 2在数2中出现了1次,在数12中出现1次,在数 20 中出现1次,在数21 中出现1次,在数 22中出现2次,所以数字2在该范围内一共出现了6次。

输入格式:

输入一行,输入两个整数L和R,这两个整数之间用空格隔开。

输出格式:

输出一行一个整数,表示2出现的次数。

输入输出样例:

输入样例1

输出样例1

4 23

6

输入样例2

输出样例2

10 30 

11

问题分析:

对于范围 [L, R] 内的每一个整数,都需要进行数位分离求出其每一位数字,以便检查其中数字 2 的出现情况,分离整数各个数位可以使用实战训练1中的思想来解决,即使用while循环,条件表达式为该整数大于0,循环体内执行取模和整数运算;由于需要对区间内所有的整数都要执行一次操作,所以该问题是嵌套循环,内层循环为分离数位的while循环,外层循环次数确定,外层循环可以采用for来实现,循环变量起始值为L,终值为R,更新表达式为自增运算,while循环是for的循环体;此外还需要一个变量 sum来存储数字 2 在整个范围 [L, R] 内的出现总次数。遍历范围 [L, R] 内的每一个整数,对于每个整数,使用上述的数字分离和检查逻辑来计算数字2的出现次数,并累加到 sum中。具体程序代码如下:

#include<bits/stdc++.h>
using namespace std;
int main(){int l,r,sum=0;//定义整数的范围变量l和r,以及数字2出现的总次数变量sum,并将sum初始化为0 cin>>l>>r;//输入l和r的值 for(int i=l;i<=r;i++){//外层循环,体现对于[l,r]范围的每一个整数都执行找数字2的操作 int tmp = i;//数位分离时要修改该整数,为了防止i发生变换,将i赋值给临时变量tmp while(tmp){//对该整数进行数位分离 if(tmp%10 == 2){//判断最低位是否为2 sum++;//将2出现的次数进行自增运算 }tmp /= 10;//修改整数的值 }}cout<<sum<<endl;//输出2出现的次数 return 0;
}

实战训练3—数1的计数问题

问题描述:

给定一个正整数 n(1≤n≤10000),写下从1到n的所有整数,然后数一下其中出现的数字1的个数。例如当n=2 时,写下1,2。这样只出现了1 个1;当n=12 时,写下1,2,3,4,5,6,7,8,9,10,11,12。这样出现了5 个1。

输入格式:

输入一行一个整数n。

输出格式:

输出一行一个整数表示数字1出现的个数。

输入输出样例:

输入样例1

输出样例1

20

12

输入样例2

输出样例2

30

13

问题分析:

根据题意求解数字1出现的次数,该题目和训练2的题目类似,不同之处在于首先范围的变化,训练2为输入范围 [L, R] ,而该题目是输入一个整数n,范围变成[1,n],其次训练2为判断数字2的次数,而该题目为数字1的个数,剩余内容一样,可以参考训练2,具体程序代码如下:


#include<bits/stdc++.h>
using namespace std;
int main() {int n,sum = 0;//定义整数的右范围变量n,以及数字1出现的总次数变量sum,并将sum初始化为0 cin>>n;//输入n的值 for(int i=1;i<=n;i++){//外层循环,体现对于[1,n]范围的每一个整数都执行找数字2的操作int tmp=i;//数位分离时要修改该整数,为了防止i发生变换,将i赋值给临时变量tmpwhile(tmp>0){//对该整数进行数位分离 if(tmp%10 == 1){//判断最低位是否为1sum++;//将1出现的次数进行自增运算 }tmp=tmp/10;//修改整数的值}}cout<<sum<<endl;//输出1出现的次数return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/66504.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CK18——肝损伤无创诊断标志物

肝脏作为人体至关重要的代谢与解毒器官&#xff0c;极易遭受病毒、药物、酒精及不良饮食等多种因素的损害&#xff0c;进而引发一系列如非酒精性脂肪肝&#xff08;NAFLD&#xff09;、肝纤维化、肝硬化、肝细胞癌以及各类肝炎等病症。因此&#xff0c;确定一种高可靠性、非侵入…

.NET Core + Kafka 开发指南

什么是Kafka Apache Kafka是一个分布式流处理平台,由LinkedIn开发并开源,后来成为Apache软件基金会的顶级项目。Kafka主要用于构建实时数据管道和流式应用程序。 Kafka 架构 从下面3张架构图中可以看出Kafka Server 实际扮演的是Broker的角色, 一个Kafka Cluster由多个Bro…

[离线数仓] 总结二、Hive数仓分层开发

接 [离线数仓] 总结一、数据采集 5.8 数仓开发之ODS层 ODS层的设计要点如下: (1)ODS层的表结构设计依托于从业务系统同步过来的数据结构。 (2)ODS层要保存全部历史数据,故其压缩格式应选择压缩比率,较高的,此处选择gzip。 CompressedStorage - Apache Hive - Apac…

Unity3D仿星露谷物语开发19之库存栏丢弃及交互道具

1、目标 从库存栏中把道具拖到游戏场景中&#xff0c;库存栏中道具数相应做减法或者删除道具。同时在库存栏中可以交换两个道具的位置。 2、UIInventorySlot设置Raycast属性 在UIInventorySlot中&#xff0c;我们只希望最外层的UIInventorySlot响应Raycast&#xff0c;他下面…

阿里云代理商热销产品推荐

在数字化浪潮的推动下&#xff0c;企业对于云计算的依赖日益加深。阿里云&#xff0c;作为中国领先的云计算服务提供商&#xff0c;为企业提供了丰富多样的云产品和服务。本文将聚焦于阿里云代理商热销产品推荐&#xff0c;探讨其如何帮助企业高效利用云资源&#xff0c;加速数…

江科大STM32入门——IIC通信笔记总结

wx&#xff1a;嵌入式工程师成长日记 &#xff08;一&#xff09;简介 STM32内部集成了硬件I2C收发电路&#xff0c;可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能&#xff0c;减轻CPU的负担 支持多主机 支持7位/10位地址模式 支持不同的通讯速…

MySQL安装,配置教程

一、Linux在线yum仓库安装 打开MySQL官方首页&#xff0c;链接为&#xff1a;https://www.mysql.com/ 界面如下&#xff1a; 在该页面中找到【DOWNOADS】选项卡&#xff0c;点击进入下载页面。 在下载界面中&#xff0c;可以看到不同版本的下载链接&#xff0c;这里选择【My…

四、VSCODE 使用GIT插件

VSCODE 使用GIT插件 一下载git插件与git Graph插件二、git插件使用三、文件提交到远程仓库四、git Graph插件 一下载git插件与git Graph插件 二、git插件使用 git插件一般VSCode自带了git&#xff0c;就是左边栏目的图标 在下载git软件后vscode的git插件会自动识别当前项目 …

消息队列MQ(二)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 MQ学习笔记 前言一、发送者的可靠性1. 生产者重试机制2. 生产者确认机制3. 实现生产者确认 二、MQ的可靠性1. 数据持久化2. LazyQueue 前言 在用MQ实现异步调用时&#xff0…

数据分析思维(九):分析方法——AARRR模型分析方法

数据分析并非只是简单的数据分析工具三板斧——Excel、SQL、Python&#xff0c;更重要的是数据分析思维。没有数据分析思维和业务知识&#xff0c;就算拿到一堆数据&#xff0c;也不知道如何下手。 推荐书本《数据分析思维——分析方法和业务知识》&#xff0c;本文内容就是提取…

【计算机网络】课程 实验四 配置快速生成树协议(RSTP)

实验四 配置快速生成树协议&#xff08;RSTP&#xff09; 一、实验目的 1&#xff0e;理解快速生成树协议RSTP的工作原理。 2&#xff0e;掌握如何在交换机上配置快速生成树。 二、实验分析与设计 【背景描述】 某学校为了开展计算机教学和网络办公&#xff0c;建立了一个计…

Tauri教程-基础篇-第一节 Tauri项目创建及结构说明

“如果结果不如你所愿&#xff0c;就在尘埃落定前奋力一搏。”——《夏目友人帐》 “有些事不是看到了希望才去坚持&#xff0c;而是因为坚持才会看到希望。”——《十宗罪》 “维持现状意味着空耗你的努力和生命。”——纪伯伦 Tauri 技术教程 * 第四章 Tauri的基础教程 第一节…

pyinstaller冻结打包多进程程序的bug:无限创建进程直至系统崩溃

前面写过两篇相关的文章&#xff1a; PyQt应用程序打包Python自动按键 这两篇文章都没有提到下面的这个重要问题&#xff1a; 采用Pyinstaller冻结打包多进程程序时&#xff0c;必须非常小心。这个技术线在Windows上会有一个非常严重的Bug。直接运行打包后的程序会造成无限创…

网络安全-kail linux 网络配置(基础篇)

一、网络配置 1.查看网络IP地址&#xff0c; 我的kail&#xff1a;192.168.15.128 使用ifconfig查看kail网络连接情况&#xff0c;ip地址情况 又复制了一台kail计算机的IP地址。 再看一下windows本机&#xff1a;使用ipconfig进行查看&#xff1a; 再看一下虚拟机上的win7I…

uni app 写的 小游戏,文字拼图?文字拼写?不知道叫啥

从下方的偏旁部首中选在1--3个组成上面文章中的文字&#xff0c;完成的文字标红 不喜勿喷 《满江红》 其中用到了两个文件 strdata.json parameters.json 这两个文件太大 放到资源中了 资源文件 <template><view class"wenzi_page_main"><view c…

分享几个高清无水印国外视频素材网站

在数字内容创作日益盛行的今天&#xff0c;高质量的视频素材成为了视频制作、广告创意和多媒体项目中不可或缺的元素。对于追求专业水准的创作者而言&#xff0c;高清、无水印的视频素材是确保作品质量的基石。以下将分享几个优质的视频素材网站&#xff0c;为您的创作之路提供…

【LLM】大语言模型基础知识及主要类别架构

文章目录 LLM大语言模型1.LLM基础知识1.1大模型介绍:1.2语言模型1.21n-gram语言模型1.22神经网络语言模型1.23基于Transformer的预训练语言模型1.24大语言模型 1.3模型评估指标1.31 BLEU1.32 Rouge指标1.33 困惑度PPL 2.LLM主要类别架构2.1 自编码模型2.2 自回归模型2.3 Encode…

剖析 Claim-Check 模式:以小传大,赋能分布式系统与微服务

1. 前言 1.1 写作背景与目的 在当今分布式系统与微服务架构盛行的时代&#xff0c;服务间的消息传递与数据交换越来越频繁。传统的消息传输在面对海量数据时&#xff0c;往往会遇到以下痛点&#xff1a; 消息体过大&#xff1a;直接通过消息队列或服务间接口发送大体量数据&…

【Uniapp-Vue3】v-if条件渲染及v-show的选择对比

如果我们想让元素根据响应式变量的值进行显示或隐藏可以使用v-if或v-show 一、v-show 另一种控制显示的方法就是使用v-show&#xff0c;使用方法和v-if一样&#xff0c;为true显示&#xff0c;为false则不显示。 二、v-if v-if除了可以像v-show一样单独使用外&#xff0c;还…

JVM实战—OOM的定位和解决

1.如何对系统的OOM异常进行监控和报警 (1)最佳的解决方案 最佳的OOM监控方案就是&#xff1a;建立一套监控平台&#xff0c;比如搭建Zabbix、Open-Falcon之类的监控平台。如果有监控平台&#xff0c;就可以接入系统异常的监控和报警&#xff0c;可以设置当系统出现OOM异常&…