解题思路:解题关键还是在第二个函数——进行处理。

根据题目我们要处理的是找出最大值or最小值,之后按要求交换位置即可;再仔细观察我们不难发现最大值和最小值要求其实差不多,那么我们的问题就变成

  1. 找最小值——利用数组,假设第一位为最小值,然后不断比较

  2. 保存最小值位置——找到最小值后,用个数记录当前位置;

  3. 之后与第一位交换

  4. 最大值也是类似


参考代码:

#include<stdio.h>
#define n 10

//输入 

int in(int a[100]){
	int i;
	for(i=0;i<n;i++){
		scanf("%d",a[i]);
	}
	return 0;
}

//主要排序交换函数 

int change(int a[100]){
	int max,min;
	int x=0;         //记录最大or最小值的位置 
		int temp,i;
	min=a[0];        //假设最小值是第一位,之后一个一个比较 
	for(i=1;i<n;i++){
		if(a[i]<min){
			min=a[i];
			x=i;
		}
	}
		//这里注意应该是确定最小值后交换,避免重复交换 
		
		temp=a[0];    //与第一位交换     
		a[0]=a[x];
		a[x]=temp;
		
	//从上面可以确定第一位是最小值,所以从第二位开始假设 
	max=a[1];
	for(i=2;i<n;i++){
		if(a[i]>max){
			max=a[i];
			x=i;
		}
}
		temp=a[9];      //与最后一位交换 
		a[9]=a[x];
		a[x]=temp; 
	return 0;
}
int out(int a[100]){
	int i;
	for(i=0;i<n;i++){
		printf("%d ",a[i]);
	}
	return 0;
}
int main(){
	int a[n];
	in(a);
	change(a);
	out(a);
	return 0;
}

但个人感觉代码有些冗余,而且本人不太会用指针,如有更好的,欢迎讨论

点赞(0)
 

0.0分

1 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论