for循环 - while循环 - 习题解析

1389. 数据分析

问题描述

某军事单位采用特殊加密方法传递信息。传递一个整数n(10位以内),其长度代表第一个数字信息,将n的偶数位相加得到第二个数字信息。要求编写程序从n中获取这两个数字信息。

解题思路
  1. 读取输入:接收一个整数n。
  2. 计算位数:初始化一个计数器,循环除以10直到n变为0,得到位数。
  3. 计算偶数位之和:在计算位数的同时,判断每一位是否为偶数,如果是则累加。
  4. 输出结果:输出位数和偶数位之和。
代码实现
#include <iostream>
using namespace std;int main() {long long n;cin >> n;int digits = 0;int sum = 0;while (n > 0) {int digit = n % 10;digits++;if (digit % 2 == 0) {sum += digit;}n /= 10;}cout << digits << " " << sum << endl;return 0;
}
代码解析
  • 使用long long类型存储输入的n,因为n可能高达10^9。
  • 初始化digits变量记录位数,sum变量记录偶数位之和。
  • 使用while循环处理n的每一位:
    • n % 10获取最后一位数字。
    • digits++计数位数。
    • 判断该位是否为偶数,是则加到sum中。
    • n /= 10去掉最后一位。
  • 循环结束后,digits存储位数,sum存储偶数位之和。
  • 最后按要求格式输出结果。

1750. 有0的数

问题描述

求出1到n(n≤999)之间含有数字0的数的个数。

解题思路
  1. 遍历数字:从1遍历到n。
  2. 分解每个数:对于每个数,分解成个位、十位和百位。
  3. 检查每一位:检查每一位是否为0。
  4. 计数:如果一个数的任何一位是0,则计数器加1。
代码实现
#include <iostream>
using namespace std;int main() {int n;cin >> n;int count = 0;for (int i = 1; i <= n; i++) {int num = i;bool hasZero = false;while (num > 0) {if (num % 10 == 0) {hasZero = true;//存在0位break;}num /= 10;}if (hasZero) {count++;}}cout << count << endl;return 0;
}
代码解析
  • 读取输入n。
  • 使用for循环遍历1到n的所有数。
  • 对于每个数i:
    • 将i赋值给临时变量num
    • 使用while循环检查num的每一位:
      • 如果当前位(num % 10)等于0,设置hasZero为true并跳出循环。
      • 否则,将num除以10,检查下一位。
    • 如果hasZero为true,增加计数器count
  • 循环结束后,输出count,即包含0的数的个数。
  • 这种方法的时间复杂度仍然是O(n log n),因为对每个数都要检查其每一位。
  • 这个实现没有使用单独的函数,而是将所有逻辑都放在main函数中,符合不使用函数的要求。
  • 对于n≤999的情况,这种方法是足够高效的。如果n的范围更大,可能需要考虑更优化的算法。

1962. 数值计算

问题描述

给出一个不多于5位的非负整数(非0结尾),要求:

  1. 求出它是几位数
  2. 分别输出每一位数字
  3. 按逆序输出各位数字
解题思路
  1. 计算位数:使用循环除以10,直到商为0,计数得到位数。
  2. 输出每一位数字:利用整数除法和取模运算,从高位到低位输出每一位。
  3. 逆序输出:直接使用取模运算从低位到高位输出。
代码实现
#include <iostream>
#include <cmath>
using namespace std;int main() {int num, originalNum; // 声明变量存储输入的数字和原始数字cin >> num; // 读取输入的数字originalNum = num; // 保存原始数字,因为num会在后续操作中被修改// 计算位数int count = 0; // 初始化计数器int temp = num; // 临时变量,用于计算位数while (temp > 0) { // 当temp大于0时继续循环temp /= 10; // 每次除以10count++; // 位数加1}// 输出位数cout << count << endl; // 输出计算得到的位数// 输出每一位数字int divisor = pow(10, count - 1); // 计算最高位的除数while (divisor > 0) { // 当除数大于0时继续循环cout << num / divisor; // 输出当前位的数字if (divisor > 1) cout << " "; // 如果不是最后一位,输出空格num %= divisor; // 更新num为余数divisor /= 10; // 除数除以10,准备处理下一位}cout << endl; // 输出换行// 按逆序输出while (originalNum > 0) { // 当原始数字大于0时继续循环cout << originalNum % 10; // 输出最后一位originalNum /= 10; // 去掉最后一位}cout << endl; // 输出换行return 0; // 程序结束
}
代码解析
  • 代码中每一行都添加了注释,解释了该行的作用。
  • 这种实现方法不使用数组,而是通过数学运算来处理每一位数字。
  • 时间复杂度是O(log n),其中n是输入的数字,因为我们需要处理每一位数字。
  • 空间复杂度是O(1),因为只使用了常数级的额外空间。
  • 这个解决方案适用于不超过5位的正整数,完全符合题目要求。

1121. "倒"数

问题描述

输入一个正整数N(0<N<2147483647),将这个数倒着合成一个新数后输出。注意:不保留前导零。

解题思路
  1. 读取输入:读取给定的正整数N。
  2. 逐位处理:从个位开始,逐位提取数字。
  3. 构建新数:将提取的数字按相反顺序构建成新的数。
  4. 输出结果:输出构建的新数。
代码实现
#include <iostream>
using namespace std;int main() {int N; // 声明变量存储输入的正整数cin >> N; // 读取输入的数字int reversedNum = 0; // 用于存储倒序后的新数while (N > 0) { // 当N大于0时继续循环int digit = N % 10; // 获取N的最后一位数字reversedNum = reversedNum * 10 + digit; // 将digit添加到reversedNum的末尾N /= 10; // 去掉N的最后一位}cout << reversedNum << endl; // 输出倒序后的新数return 0; // 程序结束
}
代码解析
  • int N;:声明变量N来存储输入的正整数。

  • cin >> N;:从标准输入读取正整数N。

  • int reversedNum = 0;:初始化reversedNum为0,用于存储倒序后的新数。

  • while (N > 0):当N大于0时,继续循环处理每一位数字。

  • int digit = N % 10;:通过取模运算获取N的最后一位数字。

  • reversedNum = reversedNum * 10 + digit;:将新的数字添加到reversedNum的末尾。

  • N /= 10;:去掉N的最后一位数字。

  • cout << reversedNum << endl;:输出倒序后的新数。

  • 这种方法的时间复杂度是O(log N),其中N是输入的数字,因为我们需要处理每一位数字。

  • 空间复杂度是O(1),因为我们只使用了常数级的额外空间。

  • 这个解决方案自动处理了前导零的问题,因为在构建新数时,前导零自然被忽略了。

  • 该实现方法适用于题目给定范围内的所有正整数(0<N<2147483647)。

1469. 数的统计

问题描述

计算在区间1到n的所有整数中,数字x(0≤x≤9)共出现了多少次。

解题思路
  1. 读取输入:读取n和x的值。
  2. 遍历区间:从1遍历到n。
  3. 统计出现次数
    • 对每个数,分解其各个位。
    • 检查每一位是否等于x。
    • 如果等于,计数器加1。
  4. 输出结果:输出最终的计数。
代码实现
#include <iostream>
using namespace std;int main() {int n, x; // 声明变量n和xcin >> n >> x; // 读取输入的n和xint count = 0; // 初始化计数器// 遍历从1到n的每个数for (int i = 1; i <= n; i++) {int current = i; // 当前处理的数// 分解current的每一位并检查while (current > 0) {if (current % 10 == x) { // 如果当前位等于xcount++; // 计数器加1}current /= 10; // 去掉最后一位}}cout << count << endl; // 输出x出现的次数return 0; // 程序结束
}
代码解析
  • int n, x;:声明变量n和x,分别表示区间上限和要统计的数字。

  • cin >> n >> x;:从标准输入读取n和x的值。

  • int count = 0;:初始化计数器count为0。

  • for (int i = 1; i <= n; i++):遍历从1到n的每个数。

  • int current = i;:将当前处理的数赋值给current。

  • while (current > 0):循环处理current的每一位。

  • if (current % 10 == x):检查current的最后一位是否等于x。

  • count++;:如果等于x,计数器加1。

  • current /= 10;:去掉current的最后一位。

  • cout << count << endl;:输出最终的计数结果。

  • 时间复杂度:O(n log n),其中n是输入的上限值。对每个数都需要检查其每一位。

  • 空间复杂度:O(1),只使用了常数级的额外空间。

  • 这个解决方案适用于题目给定的所有输入范围(n是int范围内的整数)。

  • 该方法通过逐个检查每个数的每一位来统计x的出现次数,确保了准确性。

1511. 数字之和为13的整数

问题描述

求出1到n范围内的整数中,数字之和为13的数的个数。n不超过10000000。

解题思路
  1. 遍历范围:从1遍历到n。
  2. 计算数字和:对每个数,计算其各位数字之和。
  3. 统计符合条件的数:如果数字和等于13,计数器加1。
  4. 输出结果:输出最终的计数。
代码实现
#include <iostream>
using namespace std;int main() {int n; // 声明变量ncin >> n; // 读取输入的nint count = 0; // 初始化计数器// 遍历从1到n的每个数for (int i = 1; i <= n; i++) {int sum = 0; // 用于存储当前数字的各位之和int current = i; // 当前处理的数// 计算current的各位数字之和while (current > 0) {sum += current % 10; // 加上最后一位current /= 10; // 去掉最后一位}// 如果和为13,计数器加1if (sum == 13) {count++;}}cout << count << endl; // 输出符合条件的数的个数return 0; // 程序结束
}
代码解析
  • int n;:声明变量n,用于存储输入的范围上限。

  • cin >> n;:从标准输入读取n的值。

  • int count = 0;:初始化计数器count为0。

  • for (int i = 1; i <= n; i++):遍历从1到n的每个数。

  • int sum = 0;:初始化sum为0,用于存储当前数字的各位之和。

  • int current = i;:将当前处理的数赋值给current。

  • while (current > 0):循环处理current的每一位。

  • sum += current % 10;:将current的最后一位加到sum上。

  • current /= 10;:去掉current的最后一位。

  • if (sum == 13):检查sum是否等于13。

  • count++;:如果sum等于13,计数器加1。

  • cout << count << endl;:输出最终的计数结果。

  • 时间复杂度:O(n log n),其中n是输入的上限值。对每个数都需要计算其各位之和。

  • 空间复杂度:O(1),只使用了常数级的额外空间。

  • 这个解决方案适用于题目给定的所有输入范围(n≤10000000)。

  • 该方法通过逐个检查每个数的各位之和来统计符合条件的数的个数,确保了准确性。

  • 对于较大的n值,这种方法可能会比较耗时,但在给定的范围内仍然是可行的。

1149. 回文数个数

问题描述

给定一个正整数n(1≤n≤10000),求出1到n之间(包括1和n)的回文数的个数。

解题思路
  1. 遍历范围:从1遍历到n。
  2. 判断回文:对每个数,判断是否为回文数。
  3. 统计回文数:如果是回文数,计数器加1。
  4. 输出结果:输出最终的计数。
代码实现
#include <iostream>
using namespace std;int main() {int n; // 声明变量ncin >> n; // 读取输入的nint count = 0; // 初始化计数器// 遍历从1到n的每个数for (int i = 1; i <= n; i++) {int original = i; // 保存原始数字int reversed = 0; // 用于存储反转后的数字int temp = i; // 临时变量,用于反转过程// 反转数字while (temp > 0) {reversed = reversed * 10 + temp % 10;temp /= 10;}// 判断是否为回文数if (original == reversed) {count++;}}cout << count << endl; // 输出回文数的个数return 0; // 程序结束
}
代码解析
  • int n;:声明变量n,用于存储输入的范围上限。

  • cin >> n;:从标准输入读取n的值。

  • int count = 0;:初始化计数器count为0。

  • for (int i = 1; i <= n; i++):遍历从1到n的每个数。

  • int original = i;:保存原始数字。

  • int reversed = 0;:用于存储反转后的数字。

  • int temp = i;:临时变量,用于反转过程。

  • while (temp > 0):循环反转数字。

  • reversed = reversed * 10 + temp % 10;:构建反转后的数字。

  • temp /= 10;:去掉temp的最后一位。

  • if (original == reversed):判断原数字是否等于反转后的数字。

  • count++;:如果是回文数,计数器加1。

  • cout << count << endl;:输出最终的计数结果。

  • 时间复杂度:O(n log n),其中n是输入的上限值。对每个数都需要进行反转操作。

  • 空间复杂度:O(1),只使用了常数级的额外空间。

  • 这个解决方案适用于题目给定的所有输入范围(1≤n≤10000)。

  • 该方法通过反转每个数并与原数比较来判断是否为回文数,确保了准确性。

  • 对于给定的范围(最大10000),这种方法是高效且可行的。

1846. 阿尔法乘积

问题描述

计算一个整数的阿尔法乘积。阿尔法乘积的计算规则是:

  1. 如果是个位数,阿尔法乘积就是它本身。
  2. 否则,计算各位非0数字的乘积,然后重复此过程直到得到一个个位数。
解题思路
  1. 循环计算:使用循环代替递归,重复计算直到结果为个位数。
  2. 乘积计算:在每次循环中计算各位非0数字的乘积。
  3. 结果判断:当结果小于10时结束循环。
代码实现
#include <iostream>
using namespace std;int main() {int n; // 声明变量ncin >> n; // 读取输入的整数while (n >= 10) { // 当n不是个位数时继续循环int product = 1; // 用于存储各位非0数字的乘积int temp = n; // 临时变量,用于分解数字// 计算各位非0数字的乘积while (temp > 0) {int digit = temp % 10; // 获取最后一位数字if (digit != 0) {product *= digit; // 如果不是0,则乘到product中}temp /= 10; // 去掉最后一位}n = product; // 更新n为新的乘积}cout << n << endl; // 输出最终结果return 0; // 程序结束
}
代码解析
  • int n;:声明变量n,用于存储输入的整数和中间结果。

  • cin >> n;:从标准输入读取n的值。

  • while (n >= 10):外层循环,当n不是个位数时继续计算。

  • int product = 1;:初始化product为1,用于存储各位非0数字的乘积。

  • int temp = n;:临时变量temp,用于分解数字。

  • while (temp > 0):内层循环,处理temp的每一位数字。

  • int digit = temp % 10;:获取temp的最后一位数字。

  • if (digit != 0) { product *= digit; }:如果digit不为0,则乘到product中。

  • temp /= 10;:去掉temp的最后一位。

  • n = product;:更新n为新的乘积。

  • cout << n << endl;:输出最终结果。

  • 时间复杂度:O(log n * log n),其中n是输入的整数。外层循环最多执行log n次,每次内层循环也最多执行log n次。

  • 空间复杂度:O(1),只使用了常数级的额外空间。

  • 这个解决方案适用于题目给定的所有输入范围(int范围内的正整数)。

  • 该方法通过循环实现了阿尔法乘积的计算,避免了使用递归和函数调用,符合题目要求。

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

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

相关文章

基于淘宝商城用户购物行为数据分析系统

摘 要 在电商行业高速发展的今天&#xff0c;用户购物行为数据量呈指数型增长&#xff0c;传统的数据处理架构已经无法满足于现如今的数据处理需求。针对于这样的需求本课题设计了一种基于淘宝的用户购物行为分析系统&#xff0c;旨在通过对大量数据进行分析处理进而深入研究用…

MybatisPlus 调用 原生SQL

方式一 DemoMapper.java Mapper public interface DemoMapper extends BaseMapper<TableConfig> {Update("${sql}")int createTable(Param("sql") String sql); }测试代码 SpringBootTest class DemoMapperTest {Resourceprivate DemoMapper demo…

Portainer.io安装并配置Docker远程访问及CA证书

Portainer.io安装并配置Docker远程访问及CA证书 文章目录 Portainer.io安装并配置Docker远程访问及CA证书一.安装 Portainer.io2.启动容器 二.docker API远程访问并配置CA安全认证1.配置安全(密钥)访问2.补全CA证书信息3.生成server-key.pem4.创建服务端签名请求证书文件5.创建…

Redis的安装及详解

1.Redis介绍&#xff1f; 1.1 Redis是什么&#xff1f; Redis&#xff08;Remote Dictionary Server,远程字典服务器&#xff09;是一个开源免费的&#xff0c;用C语言编写的一个高性能的分布式内存数据库&#xff0c;基于内存运行并支持持久化的NoSQL数据库。是当前最热门的…

uniapp(全端兼容) - 最新详细实现刻度尺组件效果,uni-app实现尺子打分及手指拖动刻度尺打分评分功能,可左右滑动刻度尺改变数值、带刻度尺滑块功能、

效果图 在uniapp微信小程序/手机h5网页网站/安卓app/苹果app/支付宝小程序/nvue等(全平台完美兼容)开发中,实现uniApp各端都兼容的 “刻度尺(横格尺 | 尺子)” 手势左右两侧拖动、手指滑动刻度尺功能,水平刻度尺,支持自定义尺子颜色、大小、刻度、滑动时的步进值、最大…

深入探索Netty的事件驱动模型与实现原理

深入探索Netty的事件驱动模型与实现原理 Netty是一个基于事件驱动的高性能网络应用框架&#xff08;学习netty请参考&#xff1a;&#x1f517;深入浅出Netty&#xff1a;高性能网络应用框架的原理与实践&#xff09;&#xff0c;其设计核心是高效处理网络I/O事件。事件驱动模…

分享计算机msvcp100.dll,丢失或找不到的7个解决方法

msvcp100.dll是动态链接库文件对于执行使用 Microsoft Visual C 2010 编译器编译的应用程序至关重要。它包含了 C 标准库的实现&#xff0c;提供了应用程序运行时所需的核心功能&#xff0c;如输入/输出操作、字符串处理、数学运算和异常处理等。若系统中缺失或损坏此文件&…

低代码平台框架:开源选型、实践与应用深度解析

文章目录 1.1 低代码平台的重要性与应用背景2.1 表单建模2.2 流程设计2.3 报表&#xff08;打印&#xff09;可视化2.4 代码生成器2.5 系统管理2.6 前端UI开源选型3.1 如何选择合适的开源框架3.2 市场上的主要开源低代码平台对比3.3 开源项目的技术栈与优缺点分析 5.1 成功案例…

【详细】一步一步实现一个BP神经网络-逐行代码解说

本文来自《老饼讲解-BP神经网络》https://www.bbbdata.com/ ​ 要如何使用代码实现一个BP神经网络呢&#xff1f; 下面跟随笔者&#xff0c;一步一步详细来实现&#xff0c;再对代码进行详细解说。 通过本文可以详细掌握怎么使用matlab来实现一个BP神经网络。 一、一步一步实…

# 消息中间件 RocketMQ 高级功能和源码分析(八)

消息中间件 RocketMQ 高级功能和源码分析&#xff08;八&#xff09; 一、消息中间件 RocketMQ 源码分析&#xff1a;实时更新消息消费队列与索引文件流程说明 1、实时更新消息消费队列与索引文件 消息消费队文件、消息属性索引文件都是基于 CommitLog 文件构建的&#xff0…

点击旋转箭头样式

实现效果&#xff1a; html界面&#xff0c;主要通过isdown来控制箭头是上还是下 <el-popoverplacement"bottom"trigger"click":visible-arrow"false"v-model"isdown"popper-class"user-popover"><divslot"re…

热点观察 | 全球社交应用IAP收入持续上升,小游戏、短剧出海赛道火热!

2024年进度条即将过半&#xff0c;回顾上半年&#xff0c;“Sora横空出世”、“短剧出海”、“小游戏爆款不断"给了我们太多惊喜&#xff0c;虽说如今市场竞争激烈、行业日趋饱和&#xff0c;但新技术、新需求也在快速跟上。下面&#xff0c;我们就来盘一盘近期全球手游和…

【Ubuntu开发入门之“悟空派wukongpi/香橙派orangepi H3 linux开发②u-boot移植“】

Ubuntu开发入门之"悟空派wukongpi/香橙派orangepi H3 linux开发@u-boot移植" 问题描述解决方法获取u-boot源码编译配置u-boot制作并烧录TF 卡结束语郑重声明:本人原创博文,都是实战,均经过实际项目验证出货的 转载请标明出处:攻城狮2015 Platform: Allwinner H3 OS…

【数据库】数据库脚本编写规范(Word原件)

编写本文档的目的是保证在开发过程中产出高效、格式统一、易阅读、易维护的SQL代码。 1 编写目的 2 SQL书写规范 3 SQL编写原则 软件全套资料获取进主页或者本文末个人名片直接获取。

docker挂载卷和宿主机的文件夹有何区别

挂载卷&#xff08;Mounting Volume&#xff09;在 Docker 中是一种将数据持久化的方法&#xff0c;它允许将一个目录或文件从宿主机挂载到容器内部。挂载卷可以是以下几种类型&#xff1a; 数据卷&#xff08;Data Volume&#xff09;&#xff1a; 数据卷是 Docker 的一个特性…

Linux常用命令(15)—grepsed命令(有相关截图)

写在前面&#xff1a; 最近在学习Linux命令&#xff0c;记录一下学习Linux常用命令的过程&#xff0c;方便以后复习。仅供参考&#xff0c;若有不当的地方&#xff0c;恳请指正。如果对你有帮助&#xff0c;欢迎点赞&#xff0c;关注&#xff0c;收藏&#xff0c;评论&#xf…

常见调试器介绍

目录 常见调试器 1.1 ST-Link 1.2 DAPLink 1.3 JLink 常见调试器 市面上有很多的调试器&#xff0c;下面是大家比较常见的一些调试器&#xff0c; 比如&#xff1a;ST-Link、DAPLink、JLink、Ulink等 1.1 ST-Link ST-Link是一种用于STM8及STM32系列单片机的调试器和下载…

在线预览多类型文件_全栈

目录 一、下载运行项目 二、项目功能 三、前端项目引用 四、文件预览样式更改 在做项目时经常用到在线预览文件&#xff0c;给大家介绍一个好用的在线预览文件项目。使用技术是后端Java&#xff0c;前端Freemarker模板。 FreeMarker 特别适应与 MVC 模式的 Web 应用&#x…

Python --- 如何修改Jupyter Notebook保存文件的路径?

如何修改Jupyter Notebook在本地保存文件的默认路径&#xff1f; 一直以来都比较喜欢jupter notebook&#xff0c;自从用了以后就爱上了。平时用的时候&#xff0c;因为大多都是临时调用&#xff0c;每次在界面里直接new一个新的file就开干。 曾经也想过我创建的这些python文件…

MyBatis 源码分析-- getMapper(获取Mapper)

前言&#xff1a; 前面我们从源码层面梳理了 SqlSessionFactory、SqlSession 的创建过程&#xff0c;本篇我们继续分析一下 Mapper 的的获取过程。 初识 MyBatis 【MyBatis 核心概念】 MyBatis 源码分析–SqlSessionFactory MyBatis 源码分析–获取SqlSession 案例代码&am…