交换输出
时间限制:3000 ms | 内存限制:65535 KB
难度:1
- 描述
- 输入n(n<100)个数,找出其中最小的数,将它与最前面的数交换后输出这些数。(如果这个第一个数就是最小的数,则保持原样输出,如果最小的数有相同的按照前面的交换)
- 输入
- 输入数据有多组,每组占一行,每行的开始是一个整数n,表示这个测试实例的数值的个数,跟着就是n个整数。n=0表示输入的结束,不做处理。
- 输出
- 对于每组输入数据,输出交换后的数列,每组输出占一行。
- 样例输入
-
4 2 1 3 4 5 5 4 3 2 1 0
- 样例输出
-
1 2 3 4 1 4 3 2 5
#include<iostream>
#include<string>
#include<stack> //出入栈头文件
using namespace std;
int main()
{
int n=0;
cin>>n;
int array[n]; //用于排序的数组,其实更好的方法是不用进行排序的
int arr1[n]; //用于保存原来输入的原始数据
int m=0; //用于存储最小数所在的位置
for(int k=0;k<n;k++)
{
cin>>array[k];
arr1[k]=array[k];
}
for(int i=1;i<n;i++) //插入排序法
{
int temp=array[i];
int j=i-1;
while(j>=0&&array[j]>temp)
{
array[j+1]=array[j];
j--;
}
array[j+1]=temp;
}
for(int k=0;k<n;k++)//计算出 原始数据中最小数所在的位置,方便后面交换
{
if(arr1[k]==array[0])
m=k;
}
int temp2=arr1[0]; //交换最小数与原来数据的第一位
arr1[0]=array[0];
arr1[m]=temp2;
for(int k=0;k<n;k++)//输出
{
cout<<arr1[k]<<' ';}
return 0;
}