输出10个整数,其中最小数和第一个数对换,最大数和最后一个数对换

#include <stdio.h>
int input(int *book);
void deal(int *book);
void swap(int *a,int *b);
void output(int *book);
int main(){
	int book[10];
	int cnt;
	input(book);
	deal(book);
	output(book);
}
int input(int *book){
	int cnt;
	for(cnt=0;cnt<10;cnt++){
		scanf("%d",&book[cnt]);
	}
}
void deal (int *book){
	int cnt,min,max;
	min=0,max=9;
	for(cnt=0;cnt<10;cnt++){
		if(book[cnt]<book[min]){
			min=cnt;
		}
	}
	for(cnt=0;cnt<10;cnt++){
		if(book[cnt]>book[max]){
			max=cnt;
		}
	}
	if(max==0){
		swap(&book[min],&book[0]);
		swap(&book[min],&book[9]);
		return ;
	}
	swap(&book[min],&book[0]);
	swap(&book[max],&book[9]);
	
}
void swap(int *a,int *b){
	int temp=*a;
	*a=*b;
	*b=temp;
}
void output(int *book){
	int cnt;
	for(cnt=0;cnt<10;cnt++){
		printf("%d ",book[cnt]);
	}
}

这个实现的时候最大的问题就是,如果max的位置正好在0的位置,也就是说,max和min可能会在我们要交换到的位置上,即0,和9,那么,在考虑的时候,要分下情况,因为本题我的做法是通过下标来确定最大最小值得位置,所以一旦涉及到改变最大值和最小值位置的变化,我们就需要分出来个情况来解决这个问题

这里我处理的办法就是,因为最大值在经过第一次转化时,被调到了最小值的位置,那么我们只需要将最小值的位置和9

おすすめ

転載: blog.csdn.net/just_a_fresh_man/article/details/121423874