数组元素换位置游戏

【问题描述】输入一组数组元素,将第二大的元素和第一个元素换位置,将最小的元素和最后一个元素换位置
【输入形式】第一行输入数组长度,第二行输入数组元素(空格间隔,回车停止)

【输出形式】第一行输出:最小元素是第几个 第二大的元素是第几个

                    第二行输出:换位置之后的数组
【样例输入】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] + " ");
  }
 }
}
 这是我的课后作业,答案是自己写的。如果你们有更好的方法,真心希望告诉我。或者对我的代码有改进的地方,也请告诉我。
当然,如果那行看不懂欢迎咨询,(我每天都会看的),还有就是代码要结合着我写的思路看,更容易理解。

猜你喜欢

转载自www.cnblogs.com/HeSC980513/p/11869999.html