实验任务
高中毕业的右京没考上大学,又没找到工作,于是想自学 C 成为传说中的程序猿。这天,他遇到了一个问题,要使用指针将一个一维数组中最小的数与第一个数交换,并将第二小的数与第二个数交换。他对指针的使用不太熟练,所以向学了一学期 C 的朋友求助!
数据输入
输入一个整数 n (n < 100 ) 表示数组的大小,接下来输入 n 个整数
数据输出
将得到的数组中最小的数与第一个数交换,第二小的数与第二个数交换。(当有多个最小的数或次小的数时,只考虑第一个)最后输出交换后的数组。
输入示例
10
111
99
88
77
111
55
44
33
22
11
输出示例
11
22
88
77
111
55
44
33
99
111
解题思路
注意要先交换第一个和最小的那个,再去查找第二小的,不然可能会又交换回去。
参考代码
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 110;
const int INF = 0x3f3f3f3f;
int num[maxn];
int main()
{
int i,n,min1=INF,min2=INF,p1,p2;
while (~scanf("%d",&n)){
for (i = 0;i < n;i++){
scanf("%d",&num[i]);
if (num[i] < min1){ //找到最小的,记录位置
min1 = num[i];
p1 = i;
}
}
swap(num[0],num[p1]); //交换第一个和最小的那个
for (i = 0;i < n;i++){
if (num[i] == min1)
continue;
if (num[i] < min2){ //找第二小的
min2 = num[i];
p2 = i;
}
}
swap(num[1],num[p2]); //交换第二个和第二小的
for (i = 0;i < n;i++)
printf("%d\n",num[i]);
}
return 0;
}