由題意得知給我們一串數字,我們每次交換兩位,最少交換多少次成功得到有順序的數組。我們以平常的思維去思考,加入給你一串數字獲得最少的交換次數,意味著你的交換后續基本不會變,比如說2 1 3 5 4 中1與2交換后不變,4與5交換后不變。而且已知給出的數字必定和下標順序一致,那么我們可以更換數字直到它和對應下標相同即可得到結果。
①數組接收數據
②循環遍歷數組,和下標不對應就進行更換直到對應下標相同
③找到對應下標的數字后交換兩個數字
④每次交換使用計數器加1
⑤輸出計數器結果
代碼如下👇
public static void main(String[] args) {Scanner scan=new Scanner(System.in);int n=scan.nextInt();int[] arr=new int[n+1];for (int i = 1; i <= n; i++) {arr[i]=scan.nextInt();}int count=0;for (int i = 1; i <= n; i++) {//遍歷數組while(arr[i]!=i) {//r如果位置不對,一直更換到位置對int temp=arr[arr[i]];arr[arr[i]]=arr[i];arr[i]=temp;++count;} for (int j = 1; j < arr.length; j++) {System.out.print(arr[j]+" ");//測試}System.out.println();//測試}System.out.println(count);scan.close();}
public static void swap(int a,int b) {int temp=0;temp=a;a=b;b=temp;}
交換代碼如上,如果覺得第一個代碼比較復雜可以看一下圖示,或者寫一個全局方法。