这个题是2022年9月份c++一级的真题,它说难不难,说不难也难,评判标准主要看学生学到哪种程度以及
使用的是哪种方法。
首先来看用最基础的判断怎么做:
#include<iostream>
using namespace std;
int main(){
int a,b,c;
cin>>a>>b>>c;
if(a<=b && b<=c &&a<=c){
cout<<a<<" "<<b<<" "<<c;
}
else if(a<=c && a<=b &&c<=b){
cout<<a<<" "<<c<<" "<<b;
}
else if(b<=a && a<=c &&b<=c){
cout<<b<<" "<<a<<" "<<c;
}
else if(b<=c && c<=a &&b<=a){
cout<<b<<" "<<c<<" "<<a;
}
else if(c<=a && c<=b &&a<=b){
cout<<c<<" "<<a<<" "<<b;
}
else if(c<=b && b<=a &&c<=a){
cout<<c<<" "<<b<<" "<<a;
}
return 0;
}
这是用排列组合的方式来做,有的同学也会直接两两个数进行判断,但那样实在太麻烦了,需要写很多层循环嵌套。
这种题还有另外的出法就是三个数求最大值,它用的打擂台的思想,我们也可以使用这种思路来做这个题。
#include<iostream>
using namespace std;
int main(){
int a,b,c,max=0,min=0,m=0;
cin>>a>>b>>c;
max=a;
if(max<b){
max=b;
}
if(max<c){
max=c;
}
min=a;
if(min>b){
min=b;
}
if(min>c){
min=c;
}
m=(a+b+c)-max-min;
cout<<min<<" "<<m<<" "<<max;
return 0;
}
刚刚这两种做法都是用一级的知识点做的,c++里有一个函数叫sort,是可以直接对数据容器里的数据进行排序,但这个我们需要借助一维数组(使用sort必须导入算法库或者万能头)
#include<algorithm>//算法库
#include<bits/stdc++.h>//万能头
using namespace std;
int main(){
int a[3]={0};
scanf("%d%d%d",&a[0],&a[1],&a[2]);
sort(a,a+3);
printf("%d %d %d",a[0],a[1],a[2]);
return 0;
}
还要一种是交换值的方式,这一种就需要先简单说下它的原理了。
可以先想一下,如果现在有两瓶颜色不一样的水,我们怎样将它们进行交换呢?如果直接把一个杯子的水倒进另一个杯子,那水直接就会被覆盖掉。所以我们需要借助一个空杯子,比如A杯子和B杯子装的是颜色不一样的水,C杯子是空杯子,那我们只需要先把A杯子里的水倒进C杯子,这时A杯子的水空了就可以把B杯子的水倒进A杯子,然后再把C杯子装的A杯子的水再倒进B杯子了。(A -->C, B–>A, C–>A)
用编程来写就是:
int a=5,b=2,c=0;
c=a;
a=b;
b=c;
再回到这个题用这个思路来做的程序就是:
#include<iostream>//算法库
using namespace std;
int main(){
int a, b, c, t;
scanf("%d %d %d", &a, &b, &c);
if (a < b)
{
t = a;
a = b;
b = t;
}
if (a < c)
{
t = a;
a = c;
c = t;
}
if (b < c)
{
t = b;
b = c;
c = t;
}
printf("%d %d %d", c, b, a);
return 0;
}
好啦,同学们自己去试一试吧~