解题思路:

注意事项:依次选出和交换max、min,别先选出各自下标,再交换,在第一次交换时,可能会改变原下标下的数值,先前记录的max/min已被更新,造成标记过时
参考代码:

#include <stdio.h>

#define LEN 10

#define CHANGE(a,b) t=a,a=b,b=t

int arr[LEN]; //全局变量便于修改 

int t; //交换用过渡变量 

int i; //循环计数器 


void input(){

for(i=0;i<LEN;i++)

scanf("%d",&arr[i]);

}


void dispose(){

int max_idx=0,min_idx=0;

//依次交换max、min 

for(i=0;i<LEN;i++)

if(arr[i]>arr[max_idx])

max_idx=i;

// printf("max_idx=%d\n",max_idx);

CHANGE(arr[LEN-1],arr[max_idx]);

for(i=0;i<LEN;i++)

if(arr[i]<arr[min_idx])

min_idx=i;

// printf("min_idx=%d\n",min_idx);

CHANGE(arr[0],arr[min_idx]);

}


void output(){

for(i=0;i<LEN;i++)

printf("%d ",arr[i]);

}

int main()

{

input();

dispose();

output(); 

}


点赞(0)
 

0.0分

0 人评分

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

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

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

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

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

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

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

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

评论列表 共有 1 条评论

打酱油的 3年前 回复TA
错误的处理函数:

void dispose(){
	int max_idx=0,min_idx=0;
	for(i=0;i<LEN;i++){
	
		if(arr[i]>arr[max_idx])
			max_idx=i;
			
		if(arr[i]<arr[min_idx])
			min_idx=i;
	}
	//可能在第一次交换时,max、min位置已被更新
	//造成先前记录的 index 过时失效 
	CHANGE(arr[LEN-1],arr[max_idx]);
	CHANGE(arr[0],arr[min_idx]);
}