【NOI-题解】1389 - 数据分析1750 - 有0的数1457 - 子数整除1121 - “倒”数1962. 数值计算

news2024/10/6 20:35:55

文章目录

  • 一、前言
  • 二、问题
    • 问题:1389 - 数据分析
    • 问题:1750 - 有0的数
    • 问题:1457 - 子数整除
    • 问题:1121 - “倒”数
    • 问题:1962. 数值计算
  • 三、感谢

一、前言

本章节主要对循环中带余除法部分题目进行讲解,包括《1389 - 数据分析》《1750 - 有0的数》《1457 - 子数整除》《问题:1121 - “倒”数》《1962. 数值计算》《》题目。

二、问题

问题:1389 - 数据分析

类型:简单循环


题目描述:

该方法的操作方式为,如果要传递 2 个数字信息给友军,会直接传递给友军一个整数 n(n 是一个 10 位以内的整数),该整数的长度代表要传递的第一个数字信息,分解出该整数的每一位,如果该位是偶数,那么将这一位加到总和上去,代表要传递的第二个数字信息。
请你编写一个程序,从接收到的数字 n 中获取这 2 个数字信息。
比如:军事单位传递的数字为 12345678 ,则希望向友军传递的 2 个数字就是 8 (共有 8 位)和 20(2+4+6+8=20) 。

输入:

一个整数 n(n≤10^9 ) 。

输出:

两个整数,用空格隔开。

样例:

输入:

12345678

输出:

8 20

在这里插入图片描述


1.分析问题

  1. 已知:一个整数n;
  2. 未知:数字n中的 2 个数字信息。
  3. 关系:长度代表要传递的第一个数字信息,各数位上偶数的总和

2.定义变量

  • 定义整型变量n用于存储输入的整数,t作为临时变量存储n的每一位数字,one用于记录位数,two用于记录偶数位的总和。
	//二、数据定义 
	int n,t,one=0,two=0; 

3.输入数据

  • 读取用户输入的整数n。
	//三、数据输入 
	cin>>n;

4.数据计算
使用while(n)循环,只要n不为0就继续执行循环。

  • t = n % 10; 取n的个位数存入t。
  • if(t % 2 == 0) 判断t是否为偶数,如果是则执行two += t;累加到偶数总和中。
  • n /= 10; 通过整除10去除n的个位,使n的值向左移一位,以便下一次循环处理下一位数字。
  • ++one; 每次循环增加1,用于计数位数。
	//四、数据计算 
	while(n){
		t=n%10;
		if(t%2==0){
			two+=t;
		}
		n/=10;
		++one;	
	}

5.输出结果

  • 输出位数和偶数位数字的总和,中间用空格隔开。
	//五、输出结果 
	cout<<one <<" "<<two;

完整代码如下:

#include<bits/stdc++.h> // 引入头文件,包含了所有常用STL库函数,方便编程但可能降低编译速度,实际开发中推荐按需引入具体头文件。
using namespace std; // 声明使用标准命名空间std,使得可以直接调用std下的函数和对象,如cin, cout等,无需前缀std::。

int main(){ // 定义主函数,程序的入口点。
    
    // 分析问题
    // 已知:一个整数n;
    // 未知:要找出两个关于n的信息——数字n的位数(长度)和n中所有偶数位数字的总和。
    
    // 数据定义
    int n, t, one = 0, two = 0; // 定义变量:n为待处理的整数,t为临时变量存储n的当前位数,one记录位数,two记录偶数位总和。

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

    // 数据计算
    while(n){ // 当n不等于0时,继续循环。
        t = n % 10; // 取n的个位数存入t。
        if(t % 2 == 0){ // 判断t(当前位数)是否为偶数。
            two += t; // 若是偶数,将其加到two中。
        }
        n /= 10; // n除以10丢弃个位,让其变为下一个位的数。
        ++one; // 位数计数加1,表示处理了一位。
    }

    // 输出结果
    cout << one << " " << two; // 打印出位数(one)和偶数位数字的总和(two),中间以空格分隔。

    return 0; // 主函数结束,返回0表示程序正常退出。
}

问题:1750 - 有0的数

类型:简单循环


题目描述:

请求出 1∼n 中含有数字 0 的数,有多少个?

输入:

一个整数 n(n≤999) 。

输出:

一个整数,代表 1∼n 中含有数字 0 的数的个数。

样例:

输入:

80

输出:

8

在这里插入图片描述


1.分析问题

  1. 已知:1-n的数 (n<=999);
  2. 未知:含0的数的个数;
  3. 关系:带余除法

2.定义变量

  • 定义整型变量n用于接收用户输入的上限值,c初始化为0,用来计数含0的数字数量。
	//二、数据定义 
	int n,c=0; 

3.输入数据

  • 从标准输入读取一个整数n,作为计数范围的上限。
	//三、数据输入 
	cin>>n;

4.数据计算

通过for循环遍历10到n(含n)之间的每个数i。

  • 判断条件i%10==0检查i的个位是否为0;
  • 判断条件i/10%10==0检查i的十位是否为0(先整除后取余,确保检查十位);
  • 如果i的个位或十位包含0,则c的值增加1,表示找到了一个含0的数字。
	//四、数据计算 
	for(int i=10;i<=n;i++){
		if(i%10==0||i/10%10==0) ++c;
		
	}

5.输出结果

  • 将统计得到的含0数字的数量c输出到标准输出。
	//五、输出结果 
	cout<<c;
	return 0;

完整代码如下:

#include<bits/stdc++.h> // 包含通用头文件,提供多种常用库函数
using namespace std; // 使用std命名空间,简化标准库函数的调用

int main() { // 程序执行入口
    // 问题描述:
    // 给定一个正整数n,计算从1到n之间(包括n)数字中包含数字0的个数。
    // 方法:通过逐个检查每个数的个位和十位是否为0来计数。

    int n, count = 0; // 初始化变量,n为用户输入值,count记录含0的数的总数

    // 用户输入
    cin >> n; 

    // 循环处理:从10开始至n(包括n)
    for(int i = 10; i <= n; i++) {
        // 检查当前数的个位或十位是否为0
        if(i % 10 == 0 || i / 10 % 10 == 0) 
            count++; // 是,则count加1
    }

    // 输出结果
    cout << count; // 输出含0的数字总数

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

问题:1457 - 子数整除

类型:循环应用


题目描述:

于一个五位数 abcde ,可将其拆分为三个子数:
sub1=abc
sub2=bcd
sub3=cde
例如,五位数20207 可以拆分成sub1=202
sub2=020 (也就是 20)
sub3=207
现在给定一个正整数 K ,要求你编程求出 10000 到30000 之间所有满足下述条件的五位数,条件是这些五位数的三个子数sub1,sub2,sub3 都可被 K 整除。

输入:

一个正整数K(0<K<1000) 。

输出:

每一行为一个满足条件的五位数,要求从小到大输出。
不得重复输出或遗漏。如果无解,则输出 No。

样例:

输入:

15

输出:

22555
25555
28555
30000

在这里插入图片描述


1.分析问题

  1. 已知:10000-30000的五位数,正整数K
  2. 未知:哪些五位数的三个子数sub1,sub2,sub3都可被K整除。
  3. 关系:一个五位数abcde,可将其拆分为三个子数:sub1=abc,sub2=bcd,sub3=cde

2.定义变量

  • 定义变量k用于存储用户输入的整数,sub1、sub2、sub3分别存储五位数分解出的三个子数。
  • isFind,表示是否找到了符合条件的数。
	//二、数据定义 
	int k,sub1,sub2,sub3; 
	bool isFind=false;

3.输入数据

  • 读取用户输入的正整数K。
	//三、数据输入 
	cin>>k;

4.数据计算

通过一个for循环遍历从10000到30000的所有五位数。

  • 计算每个五位数对应的sub1、sub2、sub3,方法是通过数学运算提取相应位置的数字。

  • 判断这三个子数是否都能被K整除,如果能则打印该五位数,并设置isFind为true表示找到了至少一个解。

//四、数据计算 
	for(int i=10000;i<=30000;i++){
		sub1=i/100;
		sub2=i/10%1000;
		sub3=i%1000;
		
		if(sub1%k==0&&sub2%k==0&&sub3%k==0){
			if(!isFind) isFind=true;
			cout<<i<<endl;
		}	
	}

5.输出结果

  • 如果没有找到任何符合条件的数(即isFind仍为false),则输出"No"。
//五、输出结果 
	if(!isFind){
		cout<<"No";
	}

完整代码如下:

#include <bits/stdc++.h> // 包含常用头文件
using namespace std;

int main() {
    // 问题分析:
    // 给定条件:寻找10000至30000之间,能被用户输入的正整数K整除其特定子串的所有五位数。
    // 子串定义:将五位数分为abcde,子串为abc、bcd、cde。

    // 数据定义
    int k, sub1, sub2, sub3; // k为用户输入的整数,sub1、sub2、sub3分别为五位数的子串
    bool isFind = false;     // 标记是否找到符合条件的五位数

    // 数据输入
    cin >> k; // 读取用户输入的K值

    // 数据计算
    for (int i = 10000; i <= 30000; i++) { // 遍历10000至30000之间的所有五位数
        sub1 = i / 100;                  // 提取五位数的前三位(abc)
        sub2 = (i / 10) % 1000;          // 提取五位数的中间三位(bcd),先除以10移除个位,再取模1000保留后三位
        sub3 = i % 1000;                 // 提取五位数的后三位(cde),直接对1000取余

        // 检查这三个子串是否都能被K整除
        if (sub1 % k == 0 && sub2 % k == 0 && sub3 % k == 0) {
            // 如果是第一个找到的解,标记已找到解
            if (!isFind) isFind = true;
            cout << i << endl; // 打印当前找到的满足条件的五位数
        }
    }

    // 输出结果
    // 如果没有找到任何满足条件的五位数
    if (!isFind) {
        cout << "No"; // 输出"No"
    }

    return 0; // 程序正常结束
}

问题:1121 - “倒”数

类型:需要找规律的循环


题目描述:

输入一个正整数 N(0<N<2147483647),将这个数倒着合成一个新数后输出。
比如: 543 ,倒过来是345 (请注意:34500 ,倒过来是543 ,不是00543 )!

输入:

一行,一个正整数 N 。

输出:

一行,一个正整数。

样例:

输入:

345

输出:

543

在这里插入图片描述


1.分析问题

  1. 已知:一个正整数n(0<n<2147483647);
  2. 未知:输出它的倒数;
  3. 关系:带余除法。

2.定义变量

  • 定义了两个整型变量,n用于存储输入的整数,result初始化为0,用于存放颠倒后的结果。
	//二、数据定义 
	int n,result=0;

3.输入数据

  • 通过cin读取用户输入的整数n。
	//三、数据输入 
	cin>>n;

4.数据计算

  • 使用while循环,在每次迭代中,将n的最后一个数字(通过n % 10获得)加到result的末尾(通过result * 10 + n % 10实现),同时去掉n的最后一个数字(通过n /= 10实现)。
  • 循环直至n变为0,此时result中存储的就是原数的数字顺序颠倒后的结果。
	//四、数据计算 
	while(n!=0){
		result=result*10+n%10;
		n/=10;
	}

5.输出结果

  • 使用cout输出结果result。
	//五、输出结果 
	cout<<result;

完整代码如下:

#include<iostream>
using namespace std;

int main(){
    // 一、问题分析
    // 给定条件:一个正整数n,其值位于0到2147483647之间(不包括0)。
    // 目标:输出该整数的数字顺序颠倒后的结果。
    // 方法:使用带余数的除法逐步提取原数的每一位数字,并将其累加到结果变量以构建颠倒后的数字。
    
    // 二、数据定义
    int n, result = 0;  // n 用于存储输入的整数,result 初始化为0,用于存放最终的颠倒结果
    
    // 三、数据输入
    cin >> n;  // 从标准输入读取一个整数到变量n中
    
    // 四、数据计算
    while(n){  // 当n不为0时,继续处理
        result = result * 10 + n % 10;  // 将n的最后一个数字添加到result的末尾
        n /= 10;  // 去掉n的最后一个数字
    }
    
    // 五、输出结果
    cout  << result << endl;  // 输出颠倒后的数字
    
    return 0;  // 程序结束,返回0表示成功执行
}

问题:1962. 数值计算

类型:简单循环


题目描述:

给出一个不多于 5 位的非负整数,要求
1、 求出它是几位数
2、 分别输出每一位数字
3、 按逆序输出各位数字,例如原数为 321 ,应输出 123。

输入:

一个不大于 5 位的正整数。

输出:

三行
第 1 行 5 位数。
第 2 行 用空格分开的每个数字。
第 3 行 按逆序输出这个数。

样例:

输入:

12345

输出:

5
1 2 3 4 5
54321

在这里插入图片描述


1.分析问题

  1. 已知:一个不多于 5 位的非负整数;
  2. 未知:求出它是几位数; 分别输出每一位数字;按逆序输出各位数字;

2.定义变量

  • 定义了三个变量,n用于存储输入的整数,c用于计数位数,dx用于存储逆序整数。
	//二、数据定义 
	int n,c=0,dx=0;

3.输入数据

  • 使用cin读取用户输入的整数。
	//三、数据输入 
	cin>>n;

4.数据计算

  • 通过一个while循环处理输入的整数n。在循环中,我们递增c以计数位数,同时逐步构建逆序数dx。每次循环,temp除以10并向下取整,直到temp变为0,循环结束。
	int temp=n;
	while(temp){
		++c;
		dx=dx*10+temp%10;
		temp/=10;
	}

5.输出结果

  • 首先输出整数的位数c。
  • 接着,通过将dx(逆序数)逐位输出,实际上实现了原整数的正序输出。因为对逆序数dx从低到高逐位处理,恰好等同于原数的正序遍历。
  • 最后,再次输出逆序数dx。
//五、输出结果
	cout<<c<<endl; 
	
	temp=dx;
	
	while(temp){
		cout<<temp%10<<" ";
		temp/=10;
	} 
	cout<<endl<<dx;

完整代码如下:

#include <bits/stdc++.h> // 包含常用头文件,简化代码
using namespace std; // 使用std命名空间,避免std::前缀

int main() {
    // 问题分析:
    // 给定一个最多5位的非负整数,需完成以下任务:
    // 1. 计算该整数的位数。
    // 2. 分别输出每一位数字(正序)。
    // 3. 按逆序输出每一位数字。
    
    // 数据定义:
    int n, c = 0, dx = 0; // n: 用户输入的整数; c: 记录位数; dx: 用于存储逆序后的整数
    
    // 数据输入:
    cin >> n; // 从标准输入读取一个非负整数
    
    // 数据处理:
    int temp = n; // 创建临时变量temp,用于迭代处理n
    while(temp) { // 当temp不为0时循环
        ++c; // 每次循环增加c的值,用于计数位数
        dx = dx * 10 + temp % 10; // dx通过当前最低位数字构建逆序数(当前位*10+新低位)
        temp /= 10; // temp除以10丢弃当前最低位,继续处理下一位
    }
    
    // 输出结果:
    cout << c << endl; // 输出整数的位数
    
    // 准备正序输出数字,通过逆序数dx间接实现
    temp = dx; // 将dx的值赋给temp,开始正序输出每一位
    while(temp) { // 对temp进行循环,直到所有位都输出
        cout << temp % 10 << " "; // 输出当前最低位数字,然后加空格分隔
        temp /= 10; // 移动到下一个更高位
    }
    cout << endl; // 输出换行,分隔正序与逆序输出部分
    
    cout << dx << endl; // 再次输出dx,展示逆序后的整数
    
    return 0; // 程序正常结束
}

三、感谢

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

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

在这里插入图片描述

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

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

相关文章

CV预测:快速使用LeNet-5卷积神经网络

AI预测相关目录 AI预测流程&#xff0c;包括ETL、算法策略、算法模型、模型评估、可视化等相关内容 最好有基础的python算法预测经验 EEMD策略及踩坑VMD-CNN-LSTM时序预测对双向LSTM等模型添加自注意力机制K折叠交叉验证optuna超参数优化框架多任务学习-模型融合策略Transform…

2024年先进算法与人机交互国际会议(ICCHSE 2024)

2024 International Conference on Advanced Algorithms and Human Computer Interaction 【1】大会信息 会议简称&#xff1a;ICAAHIE 2024 大会时间&#xff1a;2024-07-19 大会地点&#xff1a;中国桂林 截稿时间&#xff1a;2024-07-05(以官网为准&#xff09; 审稿通知&a…

Ajax的应用

1. Ajax Ajax是Asynchronous Javascript And XML&#xff08;异步JavaScript和XML&#xff09;的缩写。 Ajax技术描述了使用脚本操纵HTTP和Web服务器进行数据交换&#xff0c;在页面不刷新的情况下&#xff0c;实现页面的局部更新。 重点&#xff1a; Ajax 是一种在无需重新加…

服务器再升级!64线程服务器震撼上线,全新渲染体验等你来解锁

秉承着 “科技赋能创意&#xff0c;连接创造价值”的使命&#xff0c; 经过精心的策划和筹备&#xff0c; 蓝海创意云 64线程服务器&#xff0c; 以全新的面貌&#xff0c;优惠的价格&#xff0c; 与大家见面了&#xff01; 诚邀您一起&#xff0c;解锁全新的渲染体验&am…

如何利用AI绘图,生成同一人物(最好为二次元)的不同动作和不同表情的图片?

Ai绘画有一个很现实的问题&#xff0c;要保证每次画出的都是同一个人物的话&#xff0c;很费劲。 Midjourney就不必说了&#xff0c;人物的高度一致性一直得不到很好的解决。而在Stable Diffusion&#xff08;SD&#xff09;中&#xff0c;常用办法是通过同一个Seed值&#xf…

Android低代码开发 - InputMenuPanelItem详解

我们知道MenuPanel是一个菜单面板容器&#xff0c;它里面可以放各式各样的菜单和菜单组。今天我们就来详细讲解输入菜单这个东西。 InputMenuPanelItem源码 package dora.widget.panel.menuimport android.content.Context import android.text.Editable import android.text…

KEYSIGHT N1000A 采样示波器 支持哪些类型的示波器模块?

N1000A Keysight 高性能宽带宽示波器&#xff0c;它支持多种类型的模块&#xff0c;这些模块可以根据用户的需求进行选择和配置&#xff0c;以执行精密的光学、电气和TDR/TDT/S参数分析。以下是一些支持的模块类型&#xff1a; 光通信模块&#xff1a;这些模块支持深入的收发信…

量化、剪枝、蒸馏,这些大模型黑话到底说了些啥?

扎克伯格说&#xff0c;Llama3-8B还是太大了&#xff0c;不适合放到手机中&#xff0c;有什么办法&#xff1f; 量化、剪枝、蒸馏&#xff0c;如果你经常关注大语言模型&#xff0c;一定会看到这几个词&#xff0c;单看这几个字&#xff0c;我们很难理解它们都干了些什么&…

【图书推荐】《Spark入门与大数据分析实战》

本书重点 广告点击实时大数据分析、电影影评大数据分析&#xff0c;这两个综合项目适合作为课题论文、毕业论文素材&#xff0c;值得收藏。 内容简介 本书基于Spark 3.3.1框架展开&#xff0c;系统介绍Spark生态系统各组件的操作&#xff0c;以及相应的大数据分析方法。 本…

亿达四方:一站式SolidWorks代理服务,打造设计竞争力

在当今瞬息万变的设计与制造领域&#xff0c;高效、精准的3D设计软件已成为推动企业创新与发展的核心驱动力。作为业界知名的SolidWorks一站式代理服务商&#xff0c;亿达四方致力于为企业搭建从软件采购到技术应用的全方位桥梁&#xff0c;全面赋能设计团队&#xff0c;助力企…

如何保障生物制药企业,HPC环境下数据下载的安全性问题?

许多不同类型的公司和组织可能会使用高性能计算&#xff08;HPC&#xff09;来解决各种复杂的问题。制药和生物技术企业使用高性能计算&#xff08;HPC&#xff09;的方式多种多样&#xff0c;同时也涉及HPC环境下数据下载安全性问题的考量。主要包括以下几个方面&#xff1a; …

把裤袜换成黑丝(Stable Diffusion进阶篇: ComfyUI 局部重绘)

先让大伙打起精神来 局部重绘 局部重绘适用于那些对整个画面还比较满意&#xff0c;只是想修改部分区域的情况。 在WebUI中通常选择用涂抹重绘区域的方式来让AI知道要重绘哪里&#xff0c;这个被涂抹的区域会被AI识别为黑白区域&#xff0c;白色的部分也就是所谓的重绘蒙版“…

kali中安装zsteg教程

1、下载文件 git clone http://www.github.com/zed-0xff/zsteg 2、第一步需要保证虚拟机是有网络的&#xff0c;不然无法克隆 3、可以将网络设置成如下后重启&#xff0c;访问百度看看能不能访问&#xff0c;若可以访问&#xff0c;则进行下一步 4、查看源&#xff0c;删除源&…

WinForm之TCP服务端

目录 一 原型 二 源码 一 原型 二 源码 using System.Net; using System.Net.Sockets; using System.Text;namespace TCP网络服务端通讯 {public partial class Form1 : Form{public Form1(){InitializeComponent();}TcpListener listener null;TcpClient handler null;Ne…

未实施数据加密的企业,如何快速符合等保2.0标准?

企业若未实施数据加密&#xff0c;想要快速符合等保2.0标准&#xff0c;可以遵循以下步骤&#xff1a; 风险评估与规划&#xff1a; • 首先&#xff0c;进行全面的信息安全风险评估&#xff0c;识别数据处理的关键环节、敏感信息类型及其存储、传输路径。 • 基于评估结果&…

【SpringBoot + Vue 尚庭公寓实战】公寓杂费接口实现(八)

【SpringBoot Vue 尚庭公寓实战】公寓杂费接口实现&#xff08;八&#xff09; 文章目录 【SpringBoot Vue 尚庭公寓实战】公寓杂费接口实现&#xff08;八&#xff09;1、公寓杂费业务介绍2、公寓杂费逻辑模型介绍3、接口实现3.1、保存或更新杂费值3.2、保存或更新杂费名称3…

使用‘消除’技术绕过LLM的安全机制,不用训练就可以创建自己的nsfw模型

开源的大模型在理解和遵循指令方面都表现十分出色。但是这些模型都有审查的机制&#xff0c;在获得被认为是有害的输入的时候会拒绝执行指令&#xff0c;例如会返回“As an AI assistant, I cannot help you.”。这个安全功能对于防止误用至关重要&#xff0c;但它限制了模型的…

大数据同步方案怎么选,才能提高企业的业务效率?

大数据同步通常指的是在多个数据源或存储系统之间同步数据的过程&#xff0c;可以确保数据的一致性&#xff0c;提高数据的可用性和可靠性&#xff0c;同时支持数据分析和决策制定。 大数据同步的步骤通常包括&#xff1a; 数据识别&#xff1a;确定需要同步的数据类型和范围&…

《Brave New Words 》9.1 AI 世界中的就业

Part IX: Work and What Comes Next 第九部分&#xff1a;工作及其未来发展 The one who plants trees, knowing that he will never sit in their shade, has at least started to understand the meaning of life. —Rabindranath Tagore 种树的人&#xff0c;虽然知道他永远…

next.js开发中页面回退时报Unhandled Runtime ErrorTypeError destroy is not a function

Next.js开发中页面回退时报Unhandled Runtime Error:TypeError: destroy is not a function 问题描述 在Next.js开发中&#xff0c;从A页面跳转到B页面&#xff0c;再使用浏览器回退到A页面时报上述错误&#xff1a; 错误原因 是因为在B页面里&#xff0c;在使用useEffect时…