打酱油的


私信TA

用户名:1017563043

访问量:5672

签 名:

摸鱼使我快乐

等  级
排  名 952
经  验 3424
参赛次数 0
文章发表 73
年  龄 22
在职情况 学生
学  校 广州松田职业学院
专  业 计算机应用技术

  自我简介:

略略略略略略~~~~

TA的其他文章

解题思路:

注意事项:依次选出和交换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 人评分

  评论区

错误的处理函数:

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]);
}
2021-03-01 09:58:03
  • «
  • 1
  • »