【问题描述】
编写程序,从任意n个数中找出最大数和最小数,并将它们相互交换后输出。
【输入形式】
输入分2行:第一行为n的值(数据个数),第二行为n个数(各数间用空格分隔)。
【输出形式】
互换完最大数和最小数位置的n个数(各数间用一个空格分隔)。
【样例输入】
5
1 5 3 2 0
【样例输出】
1 0 3 2 5
【样例说明】
数列1、5、3、2、0中最大数是5,最小数是0,交换它们两个的位置,这个数列就变为:1、0、3、2、5
解析
一维数组热身题目。如果难以理解数组,那可以把它理解为矩阵。
本题的核心是比大小,数据规模不大且数据无序,直接采用打擂台。
关于打擂台,我在前面的文章有讲到过,这里不再赘述。想看的话就点击这些蓝色的文字:循环结构——找n个数当中的最小值
代码
#include<iostream>
using namespace std;
const int N=10002;
int a[N],n,minn=1e9,maxx=-1,pmin,pmax,t;
int main()
{
cin>>n;
pmin=pmax=1;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]>maxx)
{
maxx=a[i];
pmax=i;
}
if(a[i]<minn)
{
minn=a[i];
pmin=i;
}
}
t=a[pmin];
a[pmin]=a[pmax];
a[pmax]=t;
for(int i=1;i<=n;i++) cout<<a[i]<<" ";
}
我再补充一点,学到数组之后我喜欢定义常量。
我写C++程序的习惯是一般不用大写字母,如果用了大写字母,一般用作常量。
其基本格式为:
const <变量类型><变量名><=><常数或常数表达式>
const 是英文单词constant的缩写
const int N=10002;
代表我向电脑申请一个整型常量(int),名字叫做N,它的值是10002。
由于是常量,故程序自始至终从来不会改变常量的值。所以,如果后面有N++之类的语句程序一定会报错,运行不了。
那么,为什么要定义常量呢?
其实就是为了简化代码的编写,同时方便调试。在正规一点的竞赛类题目,题目一般会告诉你数据规模。比如你这道题知道2<=n<=10000,那么你的数组就至少要有10000个单元。可是我不想打那么多个“0”,而且我也不知道要开几个数组,倘若题目要开10个数组呢?
所以,我就先把N定义为整型常量并赋值10002(多开一两个保险),然后
int a[N];
倘若要开更多的数组,我也不怕,直接b[N],c[N],…
但是如果不定义常量,每个N都要换成10002,真的有点累。
这就是这道题目的题解。手敲代码不易,麻烦各位看官留下一个赞或评论,点击关注可以看到更多内容。