解题思路:
没什么思路,保存最小值和最大值坐标,调换就可以,很简单的一道题
注意事项:
问题在这里:
如果最小值是最后一个坐标,最大值是第一个坐标,那么会相同的坐标交换两次,也就是没有交换,所以这里可以判段一下,只交换一次
如果最大值在第0个坐标,最小值在第i个坐标,如果先将最小值和第一个交换,那么最大值的坐标就会改变了,这里就需要先将最大值换到最后,最小值在移到前面来,考虑好相关坐标的变化,比如最小值在最后一个坐标,最大值在前面的坐标,先交换最大值,最小值的坐标上的值又变动了。考虑好这三种情况即可
参考代码:
import java.io.*;
import java.util.Arrays;
public class Main{
static BufferedReader bf=new BufferedReader(new InputStreamReader(System.in));
static PrintWriter pw=new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
public static void main(String[] args) throws IOException {
String[] arr=bf.readLine().split(" ");
int[] real=toIntarr(arr);
int min=real[0];
int max=real[real.length-1];
int minIndex=0;
int maxIndex=real.length-1;
for(int i=0;i<real.length;i++) {
if(real[i]>max) {
max=real[i];
maxIndex=i;
}
if(real[i]<min) {
min=real[i];
minIndex=i;
}
}
if(minIndex==real.length-1&&maxIndex==0) {
swap(real,maxIndex,minIndex);
}else {
swap(real,maxIndex,real.length-1);
swap(real,0,minIndex);
}
print(real);
}
public static void print(int[] arr) {
for(int i:arr) {
System.out.print(i+" ");
}
}
public static int[] toIntarr(String[] arr) {
int[] intArr=new int[arr.length];
for(int i=0;i<arr.length;i++) {
intArr[i]=Integer.parseInt(arr[i]);
}
return intArr;
}
public static void swap(int[] arr,int i,int j) {
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
0.0分
1 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复