【NOI-题解】1448. 随机体能测试1469. 数的统计1511. 数字之和为13的整数1846. 阿尔法乘积

news2024/11/25 18:47:49

文章目录

  • 一、前言
  • 二、问题
    • 问题:1448. 随机体能测试
    • 问题:1469. 数的统计
    • 问题:1511. 数字之和为13的整数
    • 问题:1846. 阿尔法乘积
  • 三、感谢

一、前言

本章节主要对嵌套循环的题目进行讲解,包括《1448. 随机体能测试》《1469. 数的统计》《1511. 数字之和为13的整数》《1846. 阿尔法乘积》。

二、问题

问题:1448. 随机体能测试

类型:循环应用,嵌套循环


题目描述:

学校想随机抽取一部分同学参加体能测试,看看同学们的体能怎么样。
张老师想了一个办法,找出学号中含有 1 的同学,让他们参加体能测试;如果某同学的学号含有 1 个 1 ,那么要测试 1 次,如果含有 2 个 1 ,就要参加 2 次测试。
比如:小明同学的学号为 1211 ,那么他就要参加 3 次测试。
请问,学号 1∼n 中的同学们,总共要参加多少次测试?

输入:

一个整数 n(n≤9999) 。

输出:

一个整数,代表 1∼n 号同学总共要参加测试的次数。

样例:

输入:

11

输出:

4

在这里插入图片描述


1.分析问题

  1. 已知:随机抽取一部分同学参加体能测试。
  2. 未知:学号 1∼n 中的同学们,总共要参加多少次测试?
  3. 关系:学号中含有 1 的同学,让他们参加体能测试;如果某同学的学号含有 1 个 1 ,那么要测试 1 次,如果含有 2 个 1 ,就要参加 2 次测试。

2.定义变量

  • n:用户输入的正整数,代表范围上限。
  • c:计数器,用于累计数字1出现的次数,初始化为0。
  • t:临时变量,用于在循环中存储当前处理的数字并逐步分解它来查找数字1。
	//二、数据定义 
	int n,c=0,t;

3.输入数据

  • 从标准输入读取一个正整数n。
//三、数据输入 
	cin>>n;

4.数据计算
使用一个for循环遍历1到n(包括n)。

  • 对于每个数i:
  • 将i的值赋给t,用于处理这个数字。
  • 使用一个while循环处理t,直到t变为0。
  • 在while循环内部,使用条件语句if(t % 10 == 1)检查当前数字的个位数是否为1,如果是,则增加计数器c的值。
  • 然后,通过t /= 10;将t除以10并向下取整,相当于去掉当前的个位数,继续检查下一位。
//四、数据计算 
	for(int i=1;i<=n;i++){
		t=i;
		while(t){
			if(t%10==1){
				++c;
			}
			t/=10;
		}
	}

5.输出结果

  • 输出最终计数器c的值,即1到n之间数字1出现的总次数。
//五、输出结果
	cout<<c; 
	return 0;

完整代码如下:

#include <bits/stdc++.h> // 引入常用的STL库,以简化代码编写
using namespace std; // 使用std命名空间,避免需要前缀std::

int main() {
    // 问题描述:
    // 假设有1到n号同学,需要根据他们的学号中数字'1'的出现次数来决定参加体能测试的次数。
    // 学号中每出现一个'1',对应的学生就需要参加一次测试。

    // 数据定义:
    int n, c = 0, t; // n: 学生总数, c: 测试总次数(初始化为0), t: 临时变量,用于逐位检查学号

    // 数据输入:
    cin >> n; // 从用户那里获取学生总数n

    // 数据计算:
    // 遍历每一个学生的学号,从1到n
    for(int i = 1; i <= n; i++) {
        t = i; // 将当前学生学号i赋值给t,开始检查
        // 使用带余除法逐位检查学号中的每一个数字是否为1
        while(t) { 
            if(t % 10 == 1) { // 如果当前位数字是1
                ++c; // 测试次数加一
            }
            t /= 10; // 去掉当前最低位,检查下一位
        }
    }

    // 输出结果:
    // 打印总共需要参加测试的次数
    cout << c; 

    return 0; // 主函数正常结束
}

问题:1469. 数的统计

类型:嵌套循环


题目描述:

试计算在区间 1 到 n 的所有整数中,数字 x ( 0≤x≤9 )共出现了多少次?
例如,在 1 到 11 中,即在 1,2,3,4,5,6,7,8,9,10,11 中,数字 1 出现了 4 次。
再比如,1 到 11 中,数字 0 只出现了 1 次。

输入:

2 个整数 n 和 x 之间用一个空格隔开。( n 是一个 int 范围内的整数)

输出:

1 个整数,表示 x 出现的次数。

样例:

输入:

11 1

输出:

4

在这里插入图片描述


1.分析问题

  1. 已知:1-n的所有整数,数字x;
  2. 未知:数字x在1-n中出现的次数 。
  3. 关系:

2.定义变量

  • 声明了三个整型变量,n代表上界(即1到n之间的n),x是要查找的数字,c用于计数x出现的次数,初始化为0。
	//二、数据定义 
	int n,x,c=0; 

3.输入数据

  • 从标准输入接收两个整数,第一个是n,第二个是x。
//三、数据输入 
	cin>>n>>x;

4.数据计算

通过两层循环实现:

  • 外层循环:for(int i=1; i<=n; i++),遍历1到n之间的每个整数。
  • 内层循环(实际上是处理单个整数的循环):while(temp),当temp非零时继续循环,用于逐位检查当前整数的每一位是否等于x。
    • temp=i;:将当前遍历到的整数赋值给temp。
    • if(temp%10==x) ++c;:判断temp的个位数是否等于x,如果是,则c加1。
    • temp/=10;:将temp除以10并去掉个位数,以便检查下一位。
//四、数据计算 
	int temp;
	for(int i=1;i<=n;i++){
		temp=i;
		while(temp){
			if(temp%10==x) ++c;
			temp/=10;
		}
	}

5.输出结果

  • 输出数字x在1到n之间出现的总次数。
	//五、输出结果 
	cout<<c;

完整代码如下:

#include <bits/stdc++.h> // 引入标准库文件,包含了很多常用的头文件,方便编程
using namespace std; // 使用标准命名空间std,省略后续代码中的std::前缀

int main() {
    // 一、问题分析:
    // 已知条件:一个整数范围1到n,以及一个目标数字x。
    // 未知:数字x在1到n之间所有整数里出现的总次数。
    // 关系:需要遍历1到n之间的每个数,检查每个数里数字x出现的次数并累加。

    // 二、数据定义:
    int n, x, c = 0; // n: 上限值, x: 目标数字, c: 计数器(记录x出现的次数)

    // 三、数据输入:
    cin >> n >> x; // 从用户处读取n和x的值

    // 四、数据计算:
    int temp; // 临时变量,用于分解当前处理的数字
    for(int i = 1; i <= n; i++) { // 遍历1到n之间的每个整数
        temp = i; // 将当前数i赋值给temp,准备分解
        while(temp) { // 当temp不为0时,继续循环
            if(temp % 10 == x) ++c; // 检查temp的个位数是否等于x,如果是则c加1
            temp /= 10; // temp除以10,丢弃个位,继续检查下一位
        }
    }

    // 五、输出结果:
    cout << c; // 输出数字x在1到n之间出现的总次数

    return 0; // 程序执行成功结束,返回0
}

问题:1511. 数字之和为13的整数

类型:简单循环、嵌套循环


题目描述:

求出 1∼n 范围内的整数,使其数字之和为 13,请问这样的数有多少个?
例如:数 85 ,其数字之和为 8+5=13 ;数 373,其数字之和为 3+7+3=13 。

输入:

一个整数 n(n≤10000000);

输出:

输出一个整数,代表符合条件数的总个数。

样例:

输入:

1000

输出:

75

在这里插入图片描述


1.分析问题

  1. 已知:1-n所有的整数;
  2. 未知:符合条件的数的个数;
  3. 关系:各数位之和为13;

2.定义变量

  • n表示上界,即考虑的整数范围到n为止;c用于计数满足条件的数的数量,初始化为0。
	//二、数据定义 
	int n,c=0;

3.输入数据

  • 从用户输入获取整数n,作为数的上界。
	//三、数据输入 
	cin>>n;

4.数据计算

双重循环结构实现:

  • 外层循环:for(int i=1; i<=n; i++),遍历1到n之间的每个整数。
  • 内层逻辑:
    • temp临时存储当前遍历到的数,sum用于累加当前数的各位数字之和。
    • 当temp不为0时进入循环,逐位相加。
      • 累加temp的个位数到sum。
      • 去掉temp的个位数,继续处理下一位。
  • 如果累加和等于13,则符合条件,c自增。
	//四、数据计算
	int temp,sum; 
	for(int i=13;i<=n;i++){
		temp=i;
		sum=0;
		while(temp){
			sum+=temp%10;
			temp/=10;
		}
		if(13==sum) ++c;
	}

5.输出结果

  • 输出符合条件的数的个数。

	//五、输出结果 
	cout<<c;

完整代码如下:

#include <bits/stdc++.h> // 包含大量常用头文件的预编译库,方便编程但可能影响编译速度
using namespace std; // 使用std命名空间,可以直接调用std中的函数和对象,无需前缀

int main() {
    // 问题分析:
    // 已知条件:考虑1到n范围内的所有整数。
    // 目标:找出所有数位之和等于13的整数,并统计这些数的总数。
    // 关系:需要遍历每个数,计算其各位数字之和,并检查是否等于13。

    // 数据定义:
    int n, c = 0; // n: 上界,即考虑的整数范围最大值, c: 计数器,记录符合条件的数的数量

    // 数据输入:
    cin >> n; // 从标准输入读取整数n,作为上界

    // 数据计算:
    int temp, sum; // temp用于暂存当前遍历的数,sum用于计算当前数的位数之和
    for(int i = 1; i <= n; i++) { // 遍历从1到n的每一个整数
        temp = i; // 将当前遍历的数i赋值给temp
        sum = 0; // 初始化sum为0,用于累加当前数的位数和
        while(temp) { // 当temp不为0时循环,即继续处理当前数的位
            sum += temp % 10; // 取temp的个位数并加到sum上
            temp /= 10; // 去掉temp的个位数,继续处理下一位
        }
        if(13==sum ) ++c; // 如果当前数的位数之和等于13,则c计数器加1
    }

    // 输出结果:
    cout << c; // 输出满足条件的数的数量

    return 0; // 程序执行完毕,返回0表示成功
}

问题:1846. 阿尔法乘积

类型:嵌套循环,循环应用


题目描述:

计算一个整数的阿尔法乘积。对于一个整数 x 来说,它的阿尔法乘积是这样来计算的:如果 x 是一个个位数,那么它的阿尔法乘积就是它本身;否则的话,x 的阿尔法乘积就等于它的各位非 00 的数字相乘所得到的那个整数的阿尔法乘积。

例如:4018224312 的阿尔法乘积等于 8 ,它是按照以下的步骤来计算的:

4018224312 → 4×1×8×2×2×4×3×1×2 → 3072 → 3×7×2 → 42 → 4×2 → 8;

编写一个程序,输入一个正整数(该整数的值在 int 范围内),输出它的阿尔法乘积。

输入:

输入只有一行,即一个正整数。

输出:

输出相应的阿尔法乘积。

样例:

输入:

3072

输出:

8

在这里插入图片描述


1.分析问题

  1. 已知:一个整数;
  2. 未知:它的连续乘积,直到结果为单个数字;
  3. 关系:通过循环不断取整数的最后一位与结果相乘,同时去掉已经处理的数字。

2.定义变量

  • 定义整型变量n,用于存储用户输入的整数。
  • 定义整型变量temp和a,分别用于临时存储整数和累积乘积。
	//二、数据定义 
	int n;  
	int temp,a;

3.输入数据

  • 使用cin>>n;从标准输入读取一个整数到变量n中。
	//三、数据输入 
	cin>>n;																																																																		

4.数据计算

  1. 外层循环:while(n >= 10)确保当整数至少为两位时进入循环。如果整数只剩一位且非零,自然就是其自身的“阿尔法乘积”,无需进一步计算。
  2. 内层循环:对于当前的n,使用temp临时保存其值,a初始化为1,用于累积乘积。
  • 在内层循环中,while(temp)确保当temp非零时继续循环。
  • if (temp % 10 != 0)检查当前位是否为零,如果不为零,则将该位数字乘以a的当前值并更新a。
  • temp /= 10;每次循环结束时,将temp除以10,丢弃最右边的一位数字,以便下一轮循环处理下一位。
  1. 当内层循环结束后,n的值被更新为a,即当前阶段的非零数字乘积。外层循环继续,直到n减少到小于10,此时n即为最终的“阿尔法乘积”。
//四、数据计算 
int temp,a;
while(n>=10){
	temp=n;
	a=1;
	while(temp){
		if (temp%10!=0) a*=temp%10;
		temp/=10;
	}
	n=a;
}

5.输出结果

  • 输出计算得到的“阿尔法乘积”。
//五、输出结果 
	cout<<n;

完整代码如下:

#include<bits/stdc++.h> 
// 引入头文件,包含了C++标准库中的所有常用组件,简化了单独引入每个所需头文件的过程。但这种做法在实际开发中并不推荐,因为它会增加编译时间和代码体积,通常建议只引入实际需要的头文件。

using namespace std;
// 使用std命名空间,这样就可以直接使用std中的函数和对象,而不需要每次都加上std::前缀。

int main(){
    // 程序的主函数入口。

    // 一、分析问题
    // 已知:一个整数;
    // 未知:它的连续乘积,直到结果为单个数字;
    // 关系:通过循环不断取整数的最后一位与结果相乘,同时去掉已经处理的数字。

    // 二、数据定义
    int n; 
    // 定义整型变量n,用于存储待处理的整数。

    // 三、数据输入
    cin>>n;
    // 从标准输入读取一个整数到变量n中。

    // 四、数据计算
    int temp, a;
    // 定义临时变量temp用于存储处理过程中的整数,a用于存储当前的乘积结果。
    while(n >= 10){
        // 当n大于等于10时,继续循环,因为单个数字不需要再处理。
        temp = n;
        a = 1;
        // 初始化temp为n,a为1,开始新的乘积计算。
        while(temp){
            // 当temp不为0时,循环处理每一位数字。
            if (temp % 10 != 0) a *= temp % 10;
            // 如果当前位数字不为0,则与a相乘。
            temp /= 10;
            // 将temp除以10,去掉已处理的最低位。
        }
        n = a;
        // 将当前的乘积结果赋给n,继续下一轮处理,直到n变成一个一位数。
    }

    // 五、输出结果
    cout<<n;
    // 输出最终的单个数字,即所有非零数字连续乘积的结果。

    return 0;    
    // 主函数结束,返回0表示程序正常执行完毕。
}

三、感谢

如若本文对您的学习或工作有所启发和帮助,恳请您给予宝贵的支持——轻轻一点,为文章点赞;若觉得内容值得分享给更多朋友,欢迎转发扩散;若认为此篇内容具有长期参考价值,敬请收藏以便随时查阅。

每一次您的点赞、分享与收藏,都是对我持续创作和分享的热情鼓励,也是推动我不断提供更多高质量内容的动力源泉。期待我们在下一篇文章中再次相遇,共同攀登知识的高峰!

在这里插入图片描述

这里是引用

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

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

相关文章

Swift开发——存储属性与计算属性

Swift语言开发者建议程序设计者多用结构体开发应用程序。在Swift语言中,结构体具有了很多类的特性(除类的与继承相关的特性外),具有属性和方法,且为值类型。所谓的属性是指结构体中的变量或常量,所谓的方法是指结构体中的函数。在结构体中使用属性和方法是因为:①匹别于结…

泛微开发修炼之旅--19ecode获取用户人员信息方案汇总及代码示例(含pc端和移动端)

文章详情链接&#xff1a;19ecode获取用户人员信息方案汇总及代码示例&#xff08;含pc端和移动端&#xff09;

Android Basis - Google Keybox

什么是Keybox Keybox 又称为Gooogle attestation key&#xff0c;是Google用于管理、统计运行GMS套件设备的一种手段。 通常我们会向Google申请keybox&#xff0c;结合可能得出货量&#xff0c;提供如下信息给到的Google。 1. fingerprint 2. device id 列表 举个例子&am…

(done) AFL 都有哪些阶段? Stage progress

参考资料&#xff1a;https://afl-1.readthedocs.io/en/latest/user_guide.html 所有阶段如下&#xff0c;包括详细的解释

下载lombok.jar包,简化类的代码

Download (projectlombok.org) 去这个网站下载lombok.jar包 打开这个包文件的位置,拖到项目lib文件夹: 在这里右键添加为库(Add as library)。 添加这三个注解即可&#xff0c;类里面不需要其他东西了

基于Python的垃圾分类检测识别系统(Yolo4网络)【W8】

简介&#xff1a; 垃圾分类检测识别系统旨在利用深度学习和计算机视觉技术&#xff0c;实现对不同类别垃圾的自动识别和分类。应用环境包括Python编程语言、主流深度学习框架如TensorFlow或PyTorch&#xff0c;以及图像处理库OpenCV等&#xff0c;通过这些工具集成和优化模型&a…

物联网技术-第3章物联网感知技术-3.3传感技术

目录 1.1什么是传感器 1.1.1生活中的传感器 1.1.2人的五官与传感器 1.1.3传感器的定义 1.1.4传感器的组成 1.2传感器的特性 1.2.1传感器的静态特征 1、灵敏度&#xff08;静态灵敏度&#xff09; 2.精度 3.线性度&#xff08;非线性误差&#xff09; 4.最小检测量&a…

UITableView初识之分组显示数据Demo

基本介绍 继承自UIScrollView&#xff0c;因此可以滚动。 需要Datasource 遵循UITableViewDataSource协议的OC对象&#xff0c;都可以是UITableView的数据源&#xff0c;该协议中的方法告诉UITableView如何显示数据。 关于UITableView UITableView显示分组数据&#xff0c;对应…

【Android】使用SeekBar控制数据的滚动

项目需求 有一个文本数据比较长&#xff0c;需要在文本右侧加一个SeekBar&#xff0c;然后根据SeekBar的上下滚动来控制文本的滚动。 项目实现 我们使用TextView来显示文本&#xff0c;但是文本比较长的话&#xff0c;需要在TextView外面套一个ScrollView&#xff0c;但是我…

【 ARMv8/ARMv9 硬件加速系列 3.5.1 -- SVE 谓词寄存器有多少位?】

文章目录 SVE 谓词寄存器(predicate registers)简介SVE 谓词寄存器的位数SVE 谓词寄存器对向量寄存器的控制SVE 谓词寄存器位数计算SVE 谓词寄存器小结SVE 谓词寄存器(predicate registers)简介 ARMv9的Scalable Vector Extension (SVE) 引入了谓词寄存器(Predicate Register…

美团Meitu前端一面,期望27K

面经哥只做互联网社招面试经历分享&#xff0c;关注我&#xff0c;每日推送精选面经&#xff0c;面试前&#xff0c;先找面经哥 1、做的主要是什么项目&#xff0c;桌面端的吗&#xff1f; 2、用的主要是什么技术栈&#xff1f;vue有了解吗&#xff1f; 3、移动端开发一般怎么…

Tuxera NTFS与Paragon NTFS:两款NTFS驱动软件的深度对比 tuxera和paragon NTFS哪个好

在Mac上使用NTFS格式的磁盘&#xff0c;通常需要借助第三方的驱动软件。其中&#xff0c;Tuxera NTFS和Paragon NTFS是两款备受欢迎的选择。虽然它们的基本功能相似&#xff0c;但在细节和使用体验上却有所不同。本文将带你深入了解这两款软件的差异&#xff0c;帮助你做出更明…

三极管原理介绍

三极管 不同封装 基本定义 三极管&#xff0c;全称应为半导体三极管&#xff0c;也称双极型晶体管(BJT)、晶体三极管&#xff0c;是一种控制电流的半导体器件。其作用是把微弱信号放大成幅度值较大的电信号&#xff0c;也用作无触点开关。 三极管是半导体基本元器件之一&…

数据资产驱动的智能化决策:深度剖析数据资产在提升企业决策效率与准确性中的关键作用

在数字化、信息化日益普及的今天&#xff0c;数据已经成为企业发展的重要资产。数据资产不仅能够帮助企业更好地了解市场需求、优化业务流程&#xff0c;还能在决策过程中提供科学、精准的支持。本文将深入剖析数据资产在提升企业决策效率与准确性中的关键作用&#xff0c;探讨…

如何应对 CentOS 的停更?

文章目录 如何应对 CentOS 的停更&#xff1f;Linux发行版CentOS停更后&#xff0c;我们可选的替代品RHEL LinuxRocky Linux公有云 LinuxDebian 系 Linux 如何应对 CentOS 的停更&#xff1f; Linux发行版 Linux内核是开源的&#xff0c;任何人都可以获取源代码&#xff0c;进…

俄罗斯方块小游戏(附源码)

游戏展示 一.导包 import turtle import random 二.定义一个Block类 定义一个Block类&#xff0c;用于表示游戏中的方块&#xff0c;包含颜色和形状。 class Block:def __init__(self, color, tiles):self.color colorself.tiles tiles三.定义了7个不同的Block对象 定义了7…

全光万兆时代来临:信而泰如何推动F5G-A(50PONFTTR)技术发展

技术背景 F5G-A&#xff08;Fifth Generation Fixed Network-Advanced&#xff0c;第五代固定网络接入&#xff09;是固定网络技术的一次重大升级&#xff0c;代表了光纤网络技术的最新发展。F5G-A旨在提供更高的带宽、更低的延迟、更可靠的连接以及更广泛的应用场景。 F5G-A六…

Sunny v1.3.0 官方版 (简洁且漂亮截图应用)

前言 Sunny是一款漂亮又实用的“截图&钉图”的软件&#xff0c;亦支持“屏幕识图”和“OCR”的软件。 一、下载地址 下载链接&#xff1a;http://dygod/source 点击搜索&#xff1a;Sunny 二、安装步骤 1、解压后将Sunny.exe发送到桌面快捷方式 2、启动桌面图标 3、正…

相似性搜索揭秘:向量嵌入与机器学习应用

引言 在当今数据驱动的世界中&#xff0c;有效地检索和利用信息是一项关键挑战。在数据库、搜索引擎和众多应用程序中&#xff0c;寻找相似数据是一项基本操作。传统数据库中&#xff0c;基于固定数值标准的相似项搜索相对直接&#xff0c;通过查询语言即可实现&#xff0c;如…

每日一题——Python实现PAT甲级1144 The Missing Number(举一反三+思想解读+逐步优化)四千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页&#xff1a;用哲学编程-CSDN博客专栏&#xff1a;每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 时间复杂度分析 空间复杂度分析 总体空间复杂度&#xff1a;O(N) 总结 我…