ZZULIOJ.1120: 最值交換
阿新 • • 發佈:2018-12-22
1120: 最值交換
題目描述
有一個長度為n的整數序列。請寫一個程式,先把序列中的最小值與第一個數交換,再把最大值與最後一個數交換。輸出轉換好的序列。 分別編寫兩個函式MinIndex()和MaxIndex()來計算最小值下標和最大值下標。
intMinIndex(int a[], int n); //函式返回陣列a中最小元素的下標
intMaxIndex(int a[], int n); //函式返回陣列a中最大元素的下標
陣列元素的輸出呼叫函式PrintArr()。
輸入
輸入包括兩行。
第一行為正整數n(1≤n≤10)。
第二行為n個正整陣列成的序列,保證沒有重複元素。
輸出
輸出轉換好的序列。資料之間用空格隔開。
樣例輸入
5
5 4 1 2 3
樣例輸出
1 4 3 2 5
#include<stdio.h>
#include<limits.h>
int Minlndex(int a[],int n)
{
int i,j,min=INT_MAX,t;
for(i=0;i<n;i++)
{
if(a[i]<min) min=a[i];
}
for(i=0;i<n;i++)
{
if(a[i]==min)
{
t=i;break;
}
}
return t;
}
int Maxlndex(int a[],int n)
{
int i,j,max=INT_MIN,x;
for(i=0;i<n;i++)
{
if(a[i]>max) max=a[i];
}
for(i=0;i<n;i++)
{
if(a[i]==max)
{
x=i;break;
}
}
return x;
}
void PrintArr(int a[],int n) /*輸出陣列a的前n個元素*/
{
int i;
for(i=0;i<n;i++)
{
printf("%d ",a[i]);
}
}
int main()
{
int n,i,a[15],t,k,x;
scanf("%d",&n);
for(i=0;i<n;i++)
{
scanf("%d",&a[i]);
}
t=Minlndex(a,n);
{k=a[0];a[0]=a[t];a[t]=k;}
x=Maxlndex(a,n);
{k=a[n-1];a[n-1]=a[x];a[x]=k;}
PrintArr(a,n);
}