输入两个数a,b;要求程序运行后a,b的值发生了互换。
根据分析后的已知,未知来确定变量。
#include<iostream>
using namespace std;
int main(){
int a,b;
}
根据定义的变量,哪些需要从键盘读取,哪些不需要。
#include<iostream>
using namespace std;
int main(){
//1.分析问题: 已知:a,b的值。 未知:a,b交换以后的值。
//2.定义变量
int a,b;
//3.输入数据
cin>>a>>b;
}
有人会想既然是交换两个数,那么直接a=b,b=a不就可以了吗。简单,下一题。
真的是这样吗?
假如,小明和小刚两个人。小明有一个苹果,小刚有一个香蕉。他们两个人都想吃对方手里的水果,但是现在他们的一只手在做其他的事情,只有一只手拿着水果。这个时候他们能直接交换水果吗?
老师,这样不就行了!( •̀ ω •́ )✧
根本难不倒你,是吧!(╯▔皿▔)╯
可以看到从现实生活出发也是办不到的,计算机会怎么处理呢?
假如a=3,b=4。如果通过a=b,b=a的方式去交换两个数,可以看到当a=b时,a的值已经发生变化,不再是之前的值;所以在b=a时,b不能得到a=3这个值。
错误方法:
#include<iostream>
using namespace std;
int main(){
//1.分析问题: 已知:a,b的值。 未知:a,b交换以后的值。
//2.定义变量
int a,b;
//3.输入数据
cin>>a>>b;//a=3,b=4
//4.数据计算
a=b;//a=b=4
b=a;//b=a=4
//5.结果输出
cout<<a<<" "<<b;//4 4
}
那应该怎么去交换呢?聪明的人肯定已经想到了,找个人帮忙啊。
方法一:请个临时工
还是假如a=3,b=4。但是在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=3,b=4
//4.数据计算
temp=b;//temp=b=4
b=a;//b=a=3
a=temp;//a=temp=4
//5.结果输出
cout<<a<<" "<<b;//4 3
}
那能不能不请临时工呢?
方法二:加法交换律
加法交换律:指两个加数相加,交换加数的位置,和不变
假如a = 3,b = 4;那么a + b = 3 + 4 = 7,b + a = 4 + 3 = 7。
7- b = a,那么刚好就可以把7- b的值给b,此时完成b=a的交换;想要a获得原来的b值,那么直接用和减去现在的b值(原来的a值)就能得到。
程序如下:
#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;
}
方法三:swap函数
在C++中,swap函数用于交换两个变量的值。实际上就是方法一,但是不需要自己去写交换逻辑。
程序如下:
#include<iostream>
using namespace std;
int main(){
//1.分析问题: 已知:a,b的值。 未知:a,b交换以后的值。
//2.定义变量
int a,b,temp;
//3.输入数据
cin>>a>>b;
//4.数据计算
swap(a,b);
//5.结果输出
cout<<a<<" "<<b;
}
输出如上。
两数交换还是使用的非常多的,比如排序,找最大,三角形的验证等等。难度不高,多练习即可掌握。
1027 - 求任意三位数各个数位上数字的和
根据分析后的已知,未知来确定变量 x,s。
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
//1.分析问题:已知:x的值。 未知:x各数位相加后的和s。
//2.定义变量
int x,s;
return 0;
}
根据定义的变量,x需要输入,其它不需要。
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
//1.分析问题:已知:x的值。 未知:x各数位相加后的和s。
//2.定义变量
int x,s;
//3.输入数据
cin>>x;
return 0;
}
在解决问题之前,我们先来了解什么是数位。数位是指一个数中的每一位的数字,比如x = 123,那么x的百位=1,十位=2,个位=3;即x = 1 * 100 + 2 * 10 +3。
ok,是不是很简单。那怎么去得到每个数位的数呢?
这里我们复习一下数学中的除法。有一个数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。
因此拆位的公式就是:
那么根据拆位公式和本题要求,需要求出个位,十位,百位;再将个位,十位,百位相加。
程序如下:
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
//1.分析问题:已知:x的值。 未知:x各数位相加后的和s。
//2.定义变量
int x,s;
//3.输入数据
cin>>x;
//4.数据计算
int ge=x%10;
int shi=x/10%10;
int bai=x/100;
s=ge+shi+bai;
return 0;
}
将结果输出即可。
#include<iostream>
#include<iomanip>
using namespace std;
int main(){
//1.分析问题:已知:x的值。 未知:x各数位相加后的和s。
//2.定义变量
int x,s;
//3.输入数据
cin>>x;
//4.数据计算
int ge=x%10;
int shi=x/10%10;
int bai=x/100;
s=ge+shi+bai;
//5.输出数据
cout<<s;
return 0;
}
以上就是关于拆位求解的内容,主要记住拆位公式。关于短除法会在循环结构入门介绍。
以上的两个内容是以后学习中使用的次数非常多的,因此一定要掌握
阅读量:513
点赞量:0
收藏量:0