1. 程式人生 > >ZZULIOJ.1120: 最值交換

ZZULIOJ.1120: 最值交換

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