【问题描述】输入一组数组元素,将第二大的元素和第一个元素换位置,将最小的元素和最后一个元素换位置
【输入形式】第一行输入数组长度,第二行输入数组元素(空格间隔,回车停止)
【输出形式】第一行输出:最小元素是第几个 第二大的元素是第几个
第二行输出:换位置之后的数组
【样例输入】6
4 5 6 1 3 2
【样例输出】4 2
5 4 6 2 3 1
【思路】定义两个数组data[]和data1[],其中的元素是一样的,都是刚开始键盘输入的。
对data1进行排序,然后按题目要求在data中找第二大的,也就是data1中的倒数第二个元素,如果找到,就将data中的第一个元素给刚才找到的这个位置上。
就是替换一下原有的值,然后将data1中的倒数第二个元素给了data中的第一个元素在的位置,也就是替换了data中0号位的元素。
这样就实现了数组中元素的交换(可能有些麻烦)也就是题目中的要求。
同理实现最小值跟最后一个位置上元素的交换。
还有就是要记录第二大值跟最小值的位置:这个记录要放在程序的最前面。也就是开头的那两个for循环
如果放到程序中的那两个for循环中可能会出错。
最后按要求求和输出一下。
【代码如下:】
package text1;
import java.util.Arrays;
import java.util.Scanner;
public abstract class twelve {
public static Scanner sc = new Scanner(System.in);
public static int n = sc.nextInt();
public static int x;
public static int z;
public static void main(String[] args) {
int[] data = new int[n];
int[] data1 = new int[n];
for (int i = 0; i < n; i++) {
data[i] = sc.nextInt();
data1[i] = data[i];
}
Arrays.sort(data1);
for (int i = 0; i < n; i++) {
if (data[i] == data1[n - 2]) {
z = i;
}
if (data[i] == data1[0]) {
x = i;
}
}
//实现第二大值的交换:
for (int i = 0; i < n; i++) {
if (data[i] == data1[n - 2]) {
data[i] = data[0];
data[0] = data1[n - 2];
break;
}
}
//实现最小值的交换:
for (int i = 0; i < data1.length; i++) {
if (data[i] == data1[0]) {
data[i] = data[n - 1];
data[n - 1] = data1[0];
break;
}
}
System.out.print(x + 1 + " ");
System.out.println(z + 1);
for (int i = 0; i < n; i++) {
System.out.print(data[i] + " ");
}
}
}
这是我的课后作业,答案是自己写的。如果你们有更好的方法,真心希望告诉我。或者对我的代码有改进的地方,也请告诉我。
当然,如果那行看不懂欢迎咨询,(我每天都会看的),还有就是代码要结合着我写的思路看,更容易理解。