【NOI】C++程序设计入门五

news2024/11/17 21:24:11

文章目录

  • 前言
  • 一、两数交换
    • 1.概念
    • 2.样例
    • 3.交换方法
      • 3.1 方法一:请个临时工
      • 3.2 方法二:加法交换律
      • 3.3 方法三:swap函数
    • 4.小结
  • 二、拆位求解
    • 1.概念
    • 2.用法
  • 三、样题讲解
    • 问题:1605. 求一个两位数的个位和十位的和
    • 问题:1606. 求一个两位数倒序的结果
    • 问题:1027 - 求任意三位数各个数位上数字的和
    • 问题:1028 - 输入一个三位数,把个位和百位对调后输出
    • 问题:1390-请从键盘读入一个四位整数,求这个四位整数各个位的和是多少?
    • 问题:1109 - 加密四位数
  • 四、总结
  • 五、感谢


前言

在先前的学习历程中,我们已深入探讨了变量与数据类型的概念,并对其中的核心成员——整型int、浮点型float与double进行了细致研究。通过大量的实践练习,我们已熟练掌握了涉及整数与小数的基本运算技巧。这一节中,我们将目光转向程序设计中应用广泛且颇具实用价值的两个主题:变量交换拆位求解

本节内容将系统地介绍变量交换的几种常见方法,包括借助临时变量、利用加法交换律以及使用C++内置的swap函数,同时通过实例演示如何运用这些方法实现变量值的有效互换。接下来,我们将探讨拆位求解的基本原理,阐述如何通过取模和除法运算来获取一个数的各个数位,并结合样题详细展示如何将这些知识应用于实际问题的解决。

学习路线:C++从入门到NOI学习路线

学习大纲:C++全国青少年信息学奥林匹克竞赛(NOI)入门级-大纲

一、两数交换

1.概念

首先,让我们来探讨什么是变量的交换以及为什么需要进行交换。变量交换,简而言之,就是两个或多个变量之间值的互换。

这种操作在多种情况下都非常有用。例如,当我们需要比较两个数的大小并交换它们的位置时,变量交换就显得尤为重要。通过交换,我们可以确保较大的数存储在变量A中,较小的数存储在变量B中,这对于后续的排序、查找或其他算法操作非常有帮助。

此外,在编写复杂的算法或数据结构时,变量交换也常用于临时存储数据或改变数据的顺序。比如,在实现链表反转、数组轮转等操作时,我们需要通过交换节点或元素的值来达到目的。

因此,对于NOI的学生来说,熟练掌握变量交换的技巧是非常必要的。

2.样例

老规矩,我们还是举例说明。

在这里插入图片描述

具体而言,假设我们有两个变量A和B,分别存储数值a和b,交换操作后,A应持有原属B的值b,而B则应持有原属A的值a。例如:

// 原始状态
int a = 10;
int b = 20;

// 变量交换后
a = 20; // 现在A持有原属B的值
b = 10; // 玎在B持有原属A的值

问题来了,那怎么样进行变量交换呢?

有人可能会想既然是交换两个数,那么直接a=b,b=a不就可以了吗。简单,下一题。

在这里插入图片描述

真的是这样吗?

废话不说,上代码!

在这里插入图片描述

怎么样,和设想的不一样吧?为什么呢?

哎,我们再来举个例子。

在这里插入图片描述

假如,小明和小刚两个人。小明有一个苹果🍎,小刚有一个香蕉🍌。他们两个人都想吃对方手里的水果,但是现在他们的一只手在做其他的事情,只有一只手拿着水果(反正只允许使用一只手)。这个时候他们能直接交换水果吗?

这样不就行了!( •̀ ω •́ )✧

在这里插入图片描述

根本难不倒你,是吧!(╯▔皿▔)╯。

可以看到从现实生活出发也是办不到的,计算机会怎么处理我们刚才的程序呢?

在这里插入图片描述

很显然,变量a,b就像是两个想要交换水果的小明,小刚。因为没有多的“手”,所以是无法进行交换的。

如果程序通过a=b,b=a的方式去交换两个数,可以看到当a=b时,a的值已经发生变化,不再是之前的值;所以在b=a时,b不能得到a=10这个原来的值。

3.交换方法

3.1 方法一:请个临时工

那应该怎么去交换呢?我想聪明的人肯定已经想到了,找个人帮忙啊。

在这里插入图片描述

还是a=10,b=20。但是在b=a之前,我们通过temp=b这个操作,把b的值给了temp;然后当a需要b的值时,就去找temp要,如此就能实现两个数的交换。(temp 临时工)

在这里插入图片描述

程序如下:

#include<iostream>
using namespace std;
int main(){
	//1.分析问题: 已知:a,b的值。 未知:a,b交换以后的值。
	//2.定义变量 
	int a,b,temp;
	//3.输入数据
	cin>>a>>b;//a=10,b=20
	//4.数据计算
	temp=b;//temp=b=20
	b=a;//b=a=10
	a=temp;//a=temp=20
	//5.结果输出 
	cout<<a<<" "<<b;//20 10
}

有人可能会问了,那能不能不请临时工呢?

在这里插入图片描述

3.2 方法二:加法交换律

加法交换律:指两个加数相加,交换加数的位置,和不变 。

假如a = 10,b = 20:

  1. 首先将a和b的和赋值给a。此时,a保存了原a和b的和。

  2. 接着,将新的a(即原a和b的和)减去原b,结果赋值给b。此时,b获得了原a的值。

  3. 最后,将新的a再次减去新的b(即原a),结果赋值给a。此时,a获得了原b的值。

经过以上三步计算,变量a和b的值成功互换。

在这里插入图片描述

程序如下:

#include<iostream>
using namespace std;
int main(){
	//1.分析问题: 已知:a,b的值。 未知:a,b交换以后的值。
	//2.定义变量 
	int a,b;
	//3.输入数据
	cin>>a>>b;
	//4.数据计算
	a=a+b;
	b=a-b;
	a=a-b;
	//5.结果输出 
	cout<<a<<" "<<b;
}

3.3 方法三:swap函数

在C++中,swap函数用于交换两个变量的值。实际上就是方法一,但是不需要自己去写交换逻辑。

程序如下:

#include<iostream>
using namespace std;
int main(){
	//1.分析问题: 已知:a,b的值。 未知:a,b交换以后的值。
	//2.定义变量 
	int a,b;
	//3.输入数据
	cin>>a>>b;
	//4.数据计算
	swap(a,b);
	//5.结果输出 
	cout<<a<<" "<<b;
}

4.小结

上面的三种方法都可以完成变量的交换。

在实际编程中,推荐使用方法一(临时变量法)或方法三(swap函数法)进行变量交换,因为它们既直观又不易出错。

而方法二更多是锻炼逻辑思维能力,包括对变量作用的理解、流程控制意识、数学知识运用、问题抽象与转化能力以及异常情况考虑等方面。

二、拆位求解

1.概念

学习拆位求解,我们需要知道什么拆位,具体来说拆的是什么“位”?

这里实际上指的是数位。数位是指一个数中的每一位的数字。

以十进制为例,它有十个基本符号(0到9),基数为10。当我们要拆分一个十进制数时,会按照以下方式:

  1. 个位:表示数值中最右侧的数字,其权重为1,即这个位置上的数字表示多少个1。
  2. 十位:紧邻个位左侧的数字,其权重为10,即这个位置上的数字表示多少个10。
  3. 百位:再往左一位,其权重为10^2=100,表示多少个100。
  4. 依次类推……

在这里插入图片描述

举个例子,对于十进制数 x=123:

  • 个位:最右侧的数字是 3,表示有 3 个 1。
  • 十位:中间的数字是 2,表示有 2 个 10。
  • 百位:最左侧的数字是 1,表示有 1 个 100。

将这些按权重相加得到原数:

x=1×100+2×10+3×1=100+20+3=123

ok,是不是很简单。那怎么去得到每个数位的数呢?

2.用法

这里我们复习一下数学中的除法。有一个数x = 123。

在这里插入图片描述
从第二张图可以看到,当123除以10以后产生了余数3,而3刚好是我们想要的个数位。那我们可以通过 %10 ( 取余 )得到3。

在这里插入图片描述

但是不能通过 %100 得到2,因为得到的数是23。如果这个数是12,那么 % 10 = 2。如何将123变成12呢?要知道int整数类型在除法时,是向下取正,不管余数是1还是9都不会进位。所以想得到12可以用123 / 10。

在这里插入图片描述

想要的得到最高位,直接除以最高位数的0即可。比如123想要得到1,那么直接123 / 100。

在这里插入图片描述

因此拆位的公式就是:

  1. 个位:%10;
  2. 中间位:/数位%10;
  3. 最高位 :/数位。

三、样题讲解

问题:1605. 求一个两位数的个位和十位的和

类型:基本运算、拆位求解。


题目描述:

从键盘读入一个两位的整数 n ,请求出这个两位整数个位和十位的和是多少?

输入:

一个两位的整数 n 。

输出:

一个整数,代表 n 个位和十位的和。

样例:
输入:

24

输出:

6

在这里插入图片描述


1.分析问题

  1. 已知:一个两位的整数 n。
  2. 未知:这个两位整数个位和十位的和是多少?
  3. 关系:拆位求解 。

2.定义变量

  • int n:用于存储输入的两位整数。
  • int sum:用于存储个位和十位数字之和。
	//二、数据定义 
	int n,sum; 

3.输入数据

  • 从标准输入(键盘)接收用户输入的两位整数,将其赋值给变量n。
	//三、数据输入 
	cin>>n;

4.数据计算

利用整数除法(/)和取模运算(%)进行拆位求解:

  • n / 10:整除运算,结果为n的十位数字(不带个位)。
  • n % 10:取模运算,结果为n除以10的余数,即n的个位数字。
	//四、数据计算 
	sum=n/10+n%10;

5.输出结果

  • 将计算得到的sum值输出到标准输出(屏幕)。
	//五、输出结果 
	cout<<sum;

完整代码如下:

#include <bits/stdc++.h> 
using namespace std;

int main() {
    // 一、分析问题
    // 已知:一个两位的整数 n。
    // 未知:这个两位整数个位和十位的和是多少?
    // 关系:拆位求解

    // 二、数据定义
    // 定义变量 n 用于存储输入的两位整数
    // 定义变量 sum 用于存储个位和十位数字之和
    int n, sum;

    // 三、数据输入
    // 从标准输入(键盘)接收用户输入的两位整数,并将其赋值给变量 n
    cin >> n;

    // 四、数据计算
    // 利用整数除法(/)获取 n 的十位数字(不带个位)
    // 利用取模运算(%)获取 n 的个位数字
    // 将十位数字与个位数字相加,得到它们的和,并将结果赋值给变量 sum
    sum = n / 10 + n % 10;

    // 五、输出结果
    // 将计算得到的个位和十位数字之和(即变量 sum 的值)输出到标准输出(屏幕)
    cout << sum;

    // 六、程序结束
    // 添加 return 0; 语句,表示主函数正常结束并返回整数0
    return 0;
}

问题:1606. 求一个两位数倒序的结果

类型:基本运算、拆位求解


题目描述:

请输出一个两位的整数 n,倒过来的数,也就是输出这个两位数个位和十位颠倒的结果。
比如:整数 23 倒过来是 32,整数 18 倒过来是 81 ,整数 20 倒过来是 2。

输入:

两位整数 n。

输出:

n 倒过来的整数。

样例:

输入:

16

输出:

61

在这里插入图片描述


1.分析问题

  1. 已知:两位整数 n。
  2. 未知:n 倒过来的整数。
  3. 关系:拆位求解 。

2.定义变量

  • int n:用于存储输入的两位整数。
  • int result:用于存储倒过来的整数。
	//二、数据定义 
	int n,result; 

3.输入数据

  • 从标准输入(键盘)接收用户输入的两位整数,将其赋值给变量n。
	//三、数据输入 
	cin>>n;

4.数据计算

利用整数除法(/)和取模运算(%)进行拆位求解:

  • 利用整数除法(/)获取 n 的十位数字(不带个位),并乘以10得到其在新整数中的位置。
  • 利用取模运算(%)获取 n 的个位数字。
  • 将十位数字与个位数字相加,得到颠倒后的整数,并将结果赋值给变量 result。

    result = (n % 10) * 10 + (n / 10);

5.输出结果

  • 将计算得到的倒过来的整数(即变量result的值)输出到标准输出(屏幕)。
	//五、输出结果 
	cout<<result;

完整代码如下:

#include <iostream>
using namespace std;

int main() {
    // 一、分析问题
    // 已知:一个两位的整数 n。
    // 未知:这个两位整数颠倒后的整数是多少?
    // 关系:拆位求解

    // 二、数据定义
    // 定义变量 n 用于存储输入的两位整数
    // 定义变量 result 用于存储颠倒后的整数
    int n, result;

    // 三、数据输入
    // 从标准输入(键盘)接收用户输入的两位整数,并将其赋值给变量 n
    cin >> n;

    // 四、数据计算
    // 利用整数除法(/)获取 n 的十位数字(不带个位),并乘以10得到其在新整数中的位置
    // 利用取模运算(%)获取 n 的个位数字
    // 将十位数字与个位数字相加,得到颠倒后的整数,并将结果赋值给变量 result
    result = (n % 10) * 10 + (n / 10);

    // 五、输出结果
    // 将计算得到的颠倒后的整数(即变量 result 的值)输出到标准输出(屏幕)
    cout << result;

    // 六、程序结束
    // 添加 return 0; 语句,表示主函数正常结束并返回整数0
    return 0;
}

问题:1027 - 求任意三位数各个数位上数字的和

类型:基础问题、拆位求解


题目描述:

对于一个任意的三位自然数 x ,编程计算其各个数位上的数字之和 S 。

输入:

输入一行,只有一个整数 x(100≤x≤999) 。

输出:

输出只有一行,包括 1 个整数。

样例:

输入:

123

输出:

6

在这里插入图片描述


1.分析问题

  1. 已知:x的值。
  2. 未知:x各数位相加后的和s。
  3. 关系:拆位求解

2.定义变量

定义了一个整型变量x用于存储输入的三位整数,定义了另一个整型变量s用于存储x各数位相加后的和。

	//2.定义变量 
	int x,s;

3.输入数据
通过cin从标准输入设备(通常是键盘)读取一个整数,并将其赋值给变量x。

	//3.输入数据 
	cin>>x;

4.数据计算

  1. 先通过取模运算得到x的个位数(ge),即int ge=x%10;

  2. 然后通过连续两次除以10并取模得到x的十位数(shi),即int
    shi=x/10%10;

  3. 再通过除以100并向下取整得到x的百位数(bai),即int bai=x/100;

  4. 计算这三个数位上的数字之和并将结果赋值给变量s,即s=ge+shi+bai;

	//4.数据计算 
	int ge=x%10;
	int shi=x/10%10;
	int bai=x/100;

5.输出结果

  1. 使用cout将计算出的各数位之和(s)输出到标准输出设备(通常是显示器)。
  2. 返回0,表示程序正常结束。
	//5.输出数据
	cout<<s;

	return 0;	

完整代码如下:

#include<iostream> // 引入C++标准输入输出流库,以便进行输入输出操作
using namespace std; // 使用标准命名空间std,简化代码中对库函数的调用

int main(){ // 程序主入口函数
    // 1. 分析问题:已知一个整数x,要求计算其各个数位上的数字之和。
    
    // 2. 定义变量 
    int x, s; // 定义整型变量x用于存储输入的三位整数,定义整型变量s用于存储各数位相加后的和
    
    // 3. 输入数据 
    cin>>x; // 从标准输入(如键盘)读取一个整数并将其赋值给变量x
    
    // 4. 数据计算 
    int ge = x % 10; // 计算x的个位数,通过取模运算获取
    int shi = x / 10 % 10; // 计算x的十位数,通过连续除以10并取模获取
    int bai = x / 100; // 计算x的百位数,直接除以100并向下取整获取
    
    s = ge + shi + bai; // 将各数位的数值相加求和,并将结果存入变量s
    
    // 5. 输出数据
    cout<<s; // 将计算得到的各数位之和输出到标准输出(如显示器)

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

问题:1028 - 输入一个三位数,把个位和百位对调后输出

类型:基础问题


题目描述:

输入一个三位自然数,然后把这个数的百位数与个位数对调,输出对调后的数。

输入:

输入一行,只有一个整数 x(100≤x≤999) 。

输出:

输出只有一行,包括 1 个整数。

样例:

输入:

123

输出:

321

输入:

120

输出:

21

在这里插入图片描述


1.分析问题

  1. 已知:x的值。
  2. 未知:对调后的数。
  3. 关系:拆位求解

2.定义变量

  • 定义了一个整型变量x用于存储输入的三位整数。
	int x,g,s,b;

3.输入数据

  • 通过cin从标准输入设备(通常是键盘)读取一个整数,并将其赋值给变量x。
	cin>>x;

4.数据计算

  1. 先通过取模运算得到x的个位数(ge),即int ge=x%10;
  2. 然后通过连续两次除以10并取模得到x的十位数(shi),即int shi=x/10%10;
  3. 再通过除以100并向下取整得到x的百位数(bai),即int bai=x/100;
  4. 将得到的各个数位上的数字按照新的顺序(原百位->个位,原十位->十位,原个位->百位)重新组合成一个新的整数,即g100 + s10 + b。
	g=x%10;
	s=x/10%10;
	b=x/100%10;

5.输出结果

  1. 使用cout将重新组合后的整数输出到显示器。
  2. 主函数返回0,表示程序正常结束。
	cout<<g*100+s*10+b;
	return 0;	

完整代码如下:

#include<iostream> // 引入C++标准输入输出流库,用于进行输入输出操作


using namespace std; // 使用标准命名空间std,简化对标准库函数的调用

int main(){ // 程序主入口函数
    // 定义变量 
    int x, g, s, b; // 定义整型变量x用于存储输入的三位整数,g用于存储个位数,s用于存储十位数,b用于存储百位数
    
    // 输入数据
    cin>>x; // 从标准输入(如键盘)读取一个三位整数并将其赋值给变量x
    
    // 数据计算与处理
    g = x % 10; // 计算并获取x的个位数
    s = x / 10 % 10; // 计算并获取x的十位数
    b = x / 100 % 10; // 计算并获取x的百位数

    // 将提取出的各个数位上的数字重新排列(将原百位、十位、个位分别调整为新数的个位、十位、百位)
    // 这里通过乘以10的相应次方来实现位置调整
    int rearranged_number = g * 100 + s * 10 + b;
    
    // 输出数据
    cout<<rearranged_number; // 输出重新排列后的整数到标准输出(如显示器)

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

问题:1390-请从键盘读入一个四位整数,求这个四位整数各个位的和是多少?

类型:基础问题、拆位求解。


题目描述:

请从键盘读入一个四位整数,求这个四位整数各个位的和是多少?

输入:

一个四位整数 n 。

输出:

这个四位数各个位的和。

样例:

输入:

3456

输出:

18

在这里插入图片描述


1.分析问题

  1. 已知:一个四位整数 n 。
  2. 未知:这个四位数各个位的和。
  3. 关系:拆位求解

2.定义变量

  • 定义整型变量x用于存储输入的四位整数,g用于存储个位数,s用于存储十位数,b用于存储百位数,q用于存储千位数。
	int x,g,s,b,q;

3.输入数据

  • 通过cin从键盘获取用户输入的四位整数,并将其赋值给变量x。
	cin>>x;

4.数据计算

  • 计算并分别提取x的个位、十位、百位和千位数,方法是利用取模和除法运算。
	g=x%10;
	s=x/10%10;
	b=x/100%10;
	q=x/1000%10;

5.输出结果

  • 使用cout将各数位之和输出到显示器。
  • 主函数返回0,表示程序正常结束。
	cout<<g+s+b+q;
	return 0;	

完整代码如下:

#include<iostream> // 引入C++标准输入输出流库,提供cin和cout等功能

using namespace std; // 使用标准命名空间std,简化对库函数的调用

int main() { // 程序主入口函数
    // 定义变量 
    int x, g, s, b, q; // 定义整型变量x用于存储输入的四位整数,g、s、b、q分别用于存储个位、十位、百位和千位数字
    
    // 输入数据
    cin>>x; // 从标准输入(如键盘)读取一个四位整数并将其赋值给变量x
    
    // 数据计算与提取各个数位上的数字
    g = x % 10; // 计算并获取x的个位数
    s = (x / 10) % 10; // 计算并获取x的十位数
    b = (x / 100) % 10; // 计算并获取x的百位数
    q = x / 1000; // 计算并获取x的千位数(这里无需再进行取模运算,因为已确保输入的是四位数)
    
    // 各数位数字求和
    int sum_of_digits = g + s + b + q;
    
    // 输出数据
    cout<<sum_of_digits; // 输出各数位之和到标准输出(如显示器)

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

问题:1109 - 加密四位数

类型:基础问题、拆位求解


题目描述:

某军事单位用 4 位整数来传递信息,传递之前要求先对这个 4 位数进行加密。加密的方式是每一位都先加上 5 然后对 10 取余数,再将得到的新数颠倒过来。
例如:原数是 1379 ,那么每位加 5 对 10 取余数的结果为 6824 ,然后颠倒该数,得到新数:4286。
再比如:原数是 2570,那么每位加 5 对 10 取余数的结果为 7025 ,然后颠倒该数,得到新数: 5207 。
请根据加密要求,写出加密算法!

输入:

加密前的 4 位数。

输出:

加密后的结果。

样例:

输入:

1379

输出:

4286

在这里插入图片描述


1.分析问题

  1. 已知:加密前的 4 位数。
  2. 未知:加密后的结果。
  3. 关系:拆位求解再做运算。

2.定义变量

	int x,g,s,b,q;

3.输入数据

  • 通过cin从键盘获取用户输入的整数,并将其赋值给变量x。
	cin>>x;

4.数据计算

  • 使用取模运算符 % 和除法运算符 / 来分离出原四位整数 x 的各个数位。例如,g = x % 10; 得到个位数,s = (x / 10) % 10; 得到十位数,以此类推得到百位和千位数。
	g=x%10;
	s=x/10%10;
	b=x/100%10;
	q=x/1000%10;
  • 对于每一位数字,先加上5,然后对其结果取模10,这样可以确保每位数字仍保持在0到9之间。例如,g=(g+5)%10; 更新了经过变换后的个位数。
	g=(g+5)%10;
	s=(s+5)%10;
	b=(b+5)%10;
	q=(q+5)%10;

5.输出结果

	cout<<g*1000+s*100+b*10+q;
	return 0;

完整代码如下:

// 引入iostream库,以便进行输入输出操作
#include<iostream>

// 使用标准命名空间std,简化对库函数的调用
using namespace std;

int main() {
    // 定义变量:x用于存储输入的四位整数,g、s、b、q分别用于存储个位、十位、百位和千位数字
    int x, g, s, b, q;

    // 输入数据:从用户通过键盘输入一个四位整数,并将其赋值给变量x
    cin>>x;

    // 计算并提取各个数位上的数字
    g = x % 10;          // 获取x的个位数
    s = (x / 10) % 10;   // 获取x的十位数
    b = (x / 100) % 10;  // 获取x的百位数
    q = x / 1000;        // 获取x的千位数(这里无需取模运算,因为四位数的千位就是除以1000的商)

    // 对各数位数字加上5后取模10,确保结果仍在0-9范围内
    g = (g + 5) % 10;
    s = (s + 5) % 10;
    b = (b + 5) % 10;
    q = (q + 5) % 10;




    // 输出数据:将重新组合后的整数输出到显示器
    cout<<g * 1000 + s * 100 + b * 10 + q;

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

四、总结

本节详细探讨了变量交换与拆位求解这两个在程序设计中不可或缺的概念和技术。首先,我们深入理解了变量交换的重要性及其应用场景,认识到在诸如排序、查找、数据结构操作等过程中,正确且高效地交换变量值是保证程序正确运行的关键环节。针对变量交换,我们介绍了三种有效的方法:

  1. 临时变量法:通过引入一个额外的临时变量暂存其中一个待交换变量的值,从而实现安全、直观的交换过程。尽管这种方法略显繁琐,但其逻辑清晰,不易出错,尤其适用于初学者和对代码可读性要求较高的场合。

  2. 加法交换律法:利用加法交换律的性质,通过一系列加法和减法操作,巧妙地在不借助额外变量的情况下实现变量值的互换。这种方法虽然巧妙且无需额外内存开销,但逻辑相对复杂,对初学者理解难度较高,更适合用于锻炼逻辑思维能力和数学应用能力。

  3. swap函数法:利用C++标准库提供的swap函数,简洁、高效地完成变量交换。这种方法封装了交换逻辑,使用便捷,但对初学者而言可能隐藏了底层交换过程,不利于深入理解交换原理。

在拆位求解部分,我们首先明确了数位的概念,理解了十进制数的各个数位所对应的权重和含义。接着,通过复习数学中的除法和取余运算,我们掌握了如何通过简单的算术操作提取一个数的个位、十位乃至更高位的数字。拆位求解能力不仅在处理特定数学问题时发挥作用,而且对于理解整数内部结构、编写与整数数位相关的算法具有重要意义。

综上所述,掌握变量交换与拆位求解不仅是NOI竞赛学习的重要环节。通过本节的学习与实践,读者应能够灵活运用各种交换方法,解决实际编程中的变量交换需求,并具备将一个整数按数位进行拆分、求和等操作的能力。这些知识将为后续深入学习算法、数据结构及更复杂的编程任务打下坚实基础。

五、感谢

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

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

在这里插入图片描述

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

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

相关文章

[图像处理] MFC OnMouseMove()绘制ROI矩形时的闪烁问题

文章目录 问题对策代码完整工程 结果使用Picture控件的RedrawWindow()的效果使用Dialog的RedrawWindow()的效果使用Picture控件的RedrawWindow()&#xff0c;ROI绘制到图像外的效果 结论 问题 最近想通过业余时间&#xff0c;写一个简单的图像处理软件&#xff0c;一点点学习图…

基于表面势的增强型p-GaN HEMT器件模型

来源&#xff1a;电子学报 22年 摘要 为了满足功率电路及系统设计对p-GaN HEMT&#xff08;High Electron Mobility Transistor&#xff09;器件模型的需求&#xff0c;本文建立了一套基于表面势计算方法的增强型p-GaN HEMT器件SPICE&#xff08;Simulation Program with Int…

Ceph [OSDI‘06]论文阅读笔记

原论文&#xff1a;Ceph: A Scalable, High-Performance Distributed File System (OSDI’06) Ceph简介及关键技术要点 Ceph是一个高性能、可扩展的分布式文件系统&#xff0c;旨在提供出色的性能、可靠性和可扩展性。为了最大化数据和元数据管理的分离&#xff0c;它使用了一…

信息系统项目管理师0051:管理基础(4信息系统管理—4.1管理方法—4.1.1管理基础)

点击查看专栏目录 文章目录 第四章 信息系统管理4.1管理方法4.1.1管理基础1.层次结构2.系统管理第四章 信息系统管理 在信息技术和数据资源要素的推动下,社会各领域已经并正在加速进入数字化的全新发展时期,基于智能、网络和大数据的新经济业态正在形成,从“数字融合”向“数…

Linux(Ubuntu) 查看并删除使用【dpkg】安装的软件【mysql 8.3安装失败---原因调查】

目录 ■前言 ■查看安装的软件 ■删除安装的软件 正常删除&#xff08;dpkg -r xxxxName&#xff09; 问题解决&#xff1a;use --purge to remove them too ■其他调查信息 命令 图片1 图片2 图片3 图片4 ■前言 安装Mysql8.3失败 我的服务器-CSDN博客 ■查看安…

动态多目标测试函数DF1-DF14,FDA1-FDA5,SDP1-SDP12的TurePOF(MATLAB代码)

动态多目标测试函数FDA1、FDA2、FDA3、FDA4、FDA5的turePOF&#xff08;MATLAB代码&#xff09; 动态多目标测试函数DF1-DF14的turePOF变化&#xff08;提供MATLAB代码&#xff09; 动态多目标测试函数SDP1-SDP12的TurePOF变化视频&#xff08;含MATLAB代码及参考文献&#xff…

数据结构与算法——20.B-树

这篇文章我们来讲解一下数据结构中非常重要的B-树。 目录 1.B树的相关介绍 1.1、B树的介绍 1.2、B树的特点 2.B树的节点类 3.小结 1.B树的相关介绍 1.1、B树的介绍 在介绍B树之前&#xff0c;我们回顾一下我们学的树。 首先是二叉树&#xff0c;这个不用多说&#xff…

车载电子电器架构 —— 电子电气架构开发总结和展望

车载电子电器架构 —— 电子电气架构开发总结和展望 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要…

HTML基本语法

前言&#xff1a; html中不区分大小写&#xff0c;但建议用小写&#xff0c;因为使用组件时一般使用大写&#xff0c;便于区分两者 注释&#xff1a; <!-- 注释的内容 --> ~注释的内容只会显示在源码当中&#xff0c;不会显示在网页中 ~用于解释说明代码&#xff0c;或隐…

论文笔记:The Expressive Power of Transformers with Chain of Thought

ICLR 2024 reviewer 评分 6888【但是chair 很不喜欢】 1 intro 之前的研究表明&#xff0c;即使是具有理想参数的标准Transformer&#xff0c;也无法完美解决许多大规模的顺序推理问题&#xff0c;如模拟有限状态机、判断图中的节点是否相连&#xff0c;或解决矩阵等式问题 这…

架构师系列-搜索引擎ElasticSearch(七)- 集群管理之分片

集群健康检查 Elasticsearch 的集群监控信息中包含了许多的统计数据&#xff0c;其中最为重要的一项就是集群健康&#xff0c;它在 status字段中展示为 green&#xff08;所有主分片和副本分片都正常&#xff09;、yellow&#xff08;所有数据可用&#xff0c;有些副本分片尚未…

探索设计模式的魅力:深度挖掘响应式模式的潜力,从而精准优化AI与机器学习项目的运行效能,引领技术革新潮流

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 挖掘响应式模式&#xff0c;优化AI与机器学习项目性能&#xff0c;引领技术新潮流 ✨机器学习界的…

phpMyadmin 设置显示完整内容

额外选项这里&#xff0c;默认部分内容改成完整内容 方案&#xff1a; 版本>4.5.4.1&#xff0c;修改文件&#xff1a;config.inc.php&#xff0c;添加一行代码&#xff1a; if ( !isset($_REQUEST[pftext])) $_REQUEST[pftext] F;

【core analyzer】core analyzer的介绍和安装详情

目录 &#x1f31e;1. core和core analyzer的基本概念 &#x1f33c;1.1 coredump文件 &#x1f33c;1.2 core analyzer &#x1f31e;2. core analyzer的安装详细过程 &#x1f33c;2.1 方式一 简单但不推荐 &#x1f33c;2.2 方式二 推荐 &#x1f33b;2.2.1 安装遇到…

IOS 短信拦截插件

在使⽤iOS设备的时候, 我们经常会收到1069、1065开头的垃圾短信, 如果开了iMessage会更严重, 各种乱七⼋糟的垃圾信息会时不时地收到。 从iOS11开始, ⼿机可以⽀持恶短信拦截插件了. 我们可以通过该插件添加⼀些规则通过滤这些不需要的信息. ⼀. 使⽤xcode新建⼀个项⽬ 【1】…

python爬虫-----Selenium (第二十二天)

&#x1f388;&#x1f388;作者主页&#xff1a; 喔的嘛呀&#x1f388;&#x1f388; &#x1f388;&#x1f388;所属专栏&#xff1a;python爬虫学习&#x1f388;&#x1f388; ✨✨谢谢大家捧场&#xff0c;祝屏幕前的小伙伴们每天都有好运相伴左右&#xff0c;一定要天天…

设计模式系列:责任链模式

简介 责任链模式是一种行为型设计模式&#xff0c;它允许你将请求沿着处理者链进行发送。每个处理者都可以对请求进行处理&#xff0c;或者将其传递给链上的下一个处理者。责任链模式主要应用于面向对象编程中&#xff0c;特别是当系统中的对象需要根据其属性来决定如何处理请…

Python程序设计 二维列表

教学案例九 二维列表 1. 成绩文件的读取 score.csv文件中记录了多门同学的编号、姓名和三门功课的成绩(逗号键分隔) 格式如下 编写程序&#xff0c;将文件score.csv文件中的数据放入二维列表cjlb中(注意&#xff1a;语文、数学、英语成绩要转换为数值类型) f1open("lbk…

ASP.NET基于BS的计算机等级考试系统的设计与实现

摘 要 随着计算机技术的发展及计算机的日益普及&#xff0c;基于B/S结构的考试系统与无纸化办公一样已成为大势所趋。论文详细论述了一个基于B/S结构的计算机等级考试系统的设计过程。软件采用ASP.NET 2005作开发平台&#xff0c;C#作编程语言&#xff0c;SQL Server 2005作…

sheng的学习笔记-AI-决策树(Decision Tree)

AI目录&#xff1a;sheng的学习笔记-AI目录-CSDN博客 目录 什么是决策树 划分选择 信息增益 增益率 基尼指数 剪枝处理 预剪枝 后剪枝 连续值处理 另一个例子 基本步骤 排序 计算候选划分点集合 评估分割点 每个分割点都进行评估&#xff0c;找到最大信息增益的…