Time Limit: 3 second
Memory Limit: 2 MB
编写程序,实现以下功能:输入n个整数,请找出数列中最小数所在的位置(有多个最小数,则选最左边的那个最小数),把它与数列的第一个数对调,其他数的位置不动,输出此数列。
例如:输入n: 5
输入数组第一元素:11
输入数组第二元素:23
输入数组第三元素:5
输入数组第四元素:68
输入数组第五元素:74
输出新的数组:5 23 11 68 74
Input
输入数组元素个数n的值和数列。
第一行输入n的数值
第二行输入数组第一元素
第三行输入数组第二元素
......
第n+1行输入数组第n元素
Output
输出新的数组,每个元素之间用空格隔开
Sample Input
5 11 23 5 68 74
Sample Output
5 23 11 68 74(最后一个数的后面没有空格)
【题解】
记录最小的值和最小值的数组下标,最后换一下就可以
【代码】
#include <iostream>
#include <cstdio>
using namespace std;
const int MAXN = 32767;
int n,a[MAXN],post=1;
void input_data()
{
//freopen("E:\\rush.txt","r",stdin);
cin >> n;
for (int i=1;i<=n;i++) //输入数据
cin >> a[i];
}
void trytoget_ans()
{
int min = a[1]; //先让最小值为第一个数字
for (int i=2;i<=n;i++)//在2-n中尝试更新最小值
if (a[i]<min)
{
min = a[i];
post = i; //记录数组下标
}
a[post] = a[1];//和第一个数字互换
a[1] = min;
}
void output_ans()
{
cout << a[1];
for (int i=2;i<=n;i++)
cout << " " << a[i];
}
int main()
{
input_data();
trytoget_ans();
output_ans();
return 0;
}