9:交换最小值和最大值

9:交换最小值和最大值
本题要求编写程序,先将输入的一系列整数中的最小值与第一个数交换,然后将最大值与最后一个数交换,最后输出交换后的序列。

注意:题目保证最大和最小值都是唯一的。

输入格式:
输入在第一行中给出一个正整数N(≤10),第二行给出N个整数,数字间以空格分隔。

输出格式:
在一行中顺序输出交换后的序列,每个整数后跟一个空格。

输入样例:
5
8 2 5 1 4

输出样例:
1 2 5 4 8

作者 C课程组
单位 浙江大学
代码长度限制 16 KB
时间限制 400 ms
内存限制 64 MB

#include<stdio.h>
static int c;
int main()
{
int n,a[10],i,b[10],t;
scanf("%d",&n);
for(i=0;i<n;i++){scanf("%d",&a[i]);b[i]=a[i];}
for(i=1;i<n;i++){if(b[0]>b[i])  {t=b[0];b[0]=b[i];b[i]=t;}  }
for(i=0;i<n;i++){if(b[0]==a[i])   {c=i;}  }
t=a[0]; a[0]=a[c]; a[c]=t;
for(i=1;i<n;i++){if(b[0]<b[i])  {t=b[0];b[0]=b[i];b[i]=t;}  }
for(i=0;i<n;i++){if(b[0]==a[i])  {c=i;}  }
t=a[n-1];a[n-1]=a[c];a[c]=t;
for(i=0;i<n;i++)
printf("%d ",a[i]);
}

在这里插入图片描述

#include<stdio.h>
int main(){
	int N,i,t,a[10];
	scanf("%d",&N);
	for(i=0;i<N;i++) {  scanf("%d",&a[i]);	}
	int min=0;               /*先假设min值下标为0*/
	for(i=1;i<N;i++) {      /*然后从下标1开始依次和下标min比较大小*/
		if(a[i]<a[min])    /*如果a[i]<a[]min,就把i赋值于min*/
			min=i;        /*用min来存最小值的小标*/
                    }    /*通过上面语句找出最小值a[min]*/
	t=a[0];             /*把数组的第一值啊a[0]赋值于t*/ 
	a[0]=a[min];       /*再把最小值啊a[min]赋值于a[0],这样第一个数就是最小值啦*/
	a[min]=t;         /*然后在把之前存放在t的数组第一个值赋值与a[min]*/
	                 /*通过上面的三条语句就实现交换啦*/
	int max=0;
	for(i=1;i<N;i++) {if(a[i]>a[max])	max=i;	}
	t=a[N-1];
	a[N-1]=a[max];	
	a[max]=t;     /*关于最大值交换同上*/
	for(i=0;i<N;i++) {  printf("%d ",a[i]); }
	return 0;
}

在这里插入图片描述

#include<stdio.h>
int main()
{
	int N,i,min,max,lim,z;
	scanf("%d",&N);
	int s[N];
	for(i=0;i<N;i++){  scanf("%d",&s[i]);	}
	min=s[0];  max=s[0];
	for(i=1;i<N;i++){ if(s[i]>max) max=s[i];     if(s[i]<min) min=s[i]; }   /*找到最大值和最小值*/
   for(i=1;i<N;i++)
   {if(s[i]==min) {lim=s[0]; s[0]=s[i]; s[i]=lim; break; } }/*确定最小值位置并与第一个元素交换*/
	 for(i=1;i<N;i++) 
    {if(s[i]==max)  {lim=s[N-1];    s[N-1]=s[i]; s[i]=lim;} } /*找到最大值并与最后一个元素交换*/
	printf("%d",s[0]);     
	for(i=1;i<N;i++)
	{ printf(" %d",s[i]);  } /*输出*/
	printf(" ");
	return 0;
}

在这里插入图片描述

#include<stdio.h>
void swap(int v[], int i, int j);
int main() {
    int a[15], i, n, mini, maxi;
    scanf("%d", &n);
    mini = maxi = 0;
    for (i = 0; i < n; i++) {
        scanf("%d", &a[i]);
        if (a[i] < a[mini]) 
            mini = i;               //找到最小值的下标
         if (a[i] > a[maxi]) 
            maxi = i;              //找到最大值的下标
                           }
    swap(a, 0, mini);
    if(!maxi)              // 防止第一个数就是最大的,而第一次交换的时候把其交换到了mini的位置
        maxi = mini;
    swap(a, maxi, n - 1);      
    for (i = 0; i < n; i++)
        printf("%d ", a[i]);
        return 0;}
void swap(int v[], int i, int j) { int temp = v[i];  v[i] = v[j];   v[j] = temp;}

在这里插入图片描述

#include<stdio.h>
int main(){
	int n,i,t,t1,t2,min,max;
	scanf("%d",&n);
		int a[n];
	for(i=0;i<n;i++){ scanf("%d",&a[i]);}
	max=min=a[0];//注意初始化 
	for(i=0;i<n;i++)
    {if(a[i]>=max){t1=i;max=a[t1];}
    else if(a[i]<=min){t2=i;min=a[t2];}
	}
	t=a[0];
	a[0]=a[t2]; //只更换最大最小值正确,而两者合并执行则错误。
	a[t2]=t;
	for(i=0;i<n;i++)
    {if(a[i]>=max){t1=i; max=a[t1];}} 
    //以上for做的是初始化,问题出在最大最小值的i及位置在转换后发生了变动,所以需要重新找到max的i; 
	t=a[n-1];  a[n-1]=a[t1];  a[t1]=t;
	for(i=0;i<n;i++)
    {printf("%d ",a[i]);}
	return 0;}

在这里插入图片描述

发布了15 篇原创文章 · 获赞 1 · 访问量 336

猜你喜欢

转载自blog.csdn.net/weixin_46640830/article/details/105741238
今日推荐