題目:有?N?個瓶子,編號 1 ~?N,放在架子上。
比如有 5 個瓶子:
2 1 3 5 4
要求每次拿起 2 個瓶子,交換它們的位置。
經過若干次后,使得瓶子的序號為:
1 2 3 4 5
對于這么簡單的情況,顯然,至少需要交換 2 次就可以復位。
如果瓶子更多呢?你可以通過編程來解決。
輸入描述
輸入格式為兩行:
第一行: 一個正整數?N?(N<104), 表示瓶子的數目
第二行:?N個正整數,用空格分開,表示瓶子目前的排列情況。
輸出描述
輸出數據為一行一個正整數,表示至少交換多少次,才能完成排序。
輸入輸出樣例
示例
輸入
5
3 1 2 5 4
輸出
3
解題思路+代碼:
代碼:
import java.util.Scanner;
// 1:無需package
// 2: 類名必須Main, 不可修改public class Main {public static void main(String[] args) {/**思路:冒泡排序1.讀取輸入的N個瓶子存放進數組2.遍歷輸入的N個瓶子,再利用數組進行冒泡排序交換,記錄交換的次數*/Scanner scan = new Scanner(System.in);int n = scan.nextInt();int[] arr = new int[n+1]; //防止邊界溢出//遍歷輸入的N個瓶子存放到數組arrfor(int i = 1;i<=n;i++){arr[i] = scan.nextInt();}//記錄需要交換的次數int count = 0;//遍歷輸入的N個瓶子for(int i = 1 ;i<=n;i++){while(arr[i] != i) {int temp = arr[i];//輔助變量//進行交換arr[i] = arr[temp];arr[temp] = temp;count++;}}System.out.println(count);scan.close();}
}
?總結:這道題需要理解題目中的兩兩交換排序就是冒泡排序,知道是冒泡排序的解法調動學過的數組知識,在理清交換的邏輯就可以很好地解答該題了。