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; }