JAVA 歪解

package com.demo;


import java.util.*;

public class Demo {
    public static void main(String[] args) {

        //小於等於0的數放到數組末尾
        printComp();
        //消除重複數字以後的最大整數
        printNum();
        //骰子
        printSZ();
    }

    /**
     * 小於等於0的數放到數組末尾
     */
    private static void printComp(){
        int arr[] =  { 1 , 3 , -1 ,0 , 2 , 1 , -4 , 2 , 0 ,1 ,-10};
        for(int i=0;i<arr.length-1;i++){
            //當前值小於等於0
            if(arr[i]<=0){
                changeValue(arr,i,i);
            }
        }
        for(int n=0;n<arr.length;n++){
            System.out.print(arr[n]+" ");
        }
        System.out.println("");
    }

    /**
     * 與後面一位比較大小
     * @param arr
     * @return
     */
    private static void  changeValue(int arr[],int index,int raw){
        //與後面一位比較,如果後面一位小於0,則再找後一位,直到最後一位.
        if(index==arr.length-1){
            return;
        }
        if(arr[index+1]>0){
            int value;
            value = arr[index+1];
            arr[index+1] = arr[raw];
            arr[raw] = value;
        }else{
            changeValue(arr,index+1,raw);
        }

    }



    /**
     * 給定一個正整數,給出消除重複數字以後最大的整數
     * 輸入描述:
     * 正整數,注意考慮長整數-2147483648~2147483647
     * 輸出描述:
     * 消除重複數字以後的最大整數
     * 示例1
     * 輸入
     * 423234
     * 輸出
     * 432
     */
     public static void printNum(){
         Scanner scanner = new Scanner(System.in);
         System.out.println("請輸入一串數字:");
         String num = scanner.next();
         System.out.println(num);
         char[] chars =num.toCharArray();
         Set set = new TreeSet<>();
         for (int i = 0; i < chars.length; i++) {
             //System.out.println(chars[i]);
             String value = String.valueOf(chars[i]);
             set.add(value);
         }
         //正序組合
         StringBuffer result = new StringBuffer();
         Iterator iterator = set.iterator();
         while(iterator.hasNext()){
           String setValue = String.valueOf(iterator.next());
           result.append(setValue);
         }
         System.out.println("result:"+result.reverse().toString());
     }


    /**
     * 骰子有6個面,現在用1,2,3,4,5,6分別代表一個骰子的左,右,前,後,上,下的初始位置,
     * 用R代表向右滾動一次,用L代表向左滾動一次,可以向前翻轉(用F表示向前翻轉1次),
     * 可以向後翻轉(用B表示向後翻轉1次),可以逆時針旋轉(用A表示逆時針旋轉90度),
     * 可以順時針旋轉(用C表示順時針旋轉90度),現從初始狀態開始,根據輸入的動作序列,計算得到最終的狀態。
     輸入描述:
     初始狀態爲:123456
     輸入只包含LRFBAC的字母序列,最大長度爲50,可重複
     輸出描述:輸出最終狀態
     輸入例子:RA
     輸出例子:436512
               左,右,前,後,上,下
     */
    public static void printSZ(){
        System.out.println("SZ:輸入轉動規則");
        int []  arr = {1,2,3,4,5,6};
        //左,右,前,後,上,下
        Scanner scan = new Scanner(System.in);
        String value = scan.next();
        char[] array = value.toCharArray();
        for (int i = 0; i < array.length; i++) {
            printRotate(arr,String.valueOf(array[i]));
        }
        StringBuffer result = new StringBuffer();
        for (int i = 0; i <arr.length ; i++) {
            result.append(arr[i]);
        }
        System.out.println(result.toString());
        scan.close();
    }

    public static void printRotate(int [] arr ,String move){
        int left  = arr[0];
        int right = arr[1];
        int front = arr[2];
        int back  = arr[3];
        int upper = arr[4];
        int under = arr[5];
        //R代表向右滾動一次
        if(move.equalsIgnoreCase("R")){
            //123456
            //653412
            //前後不變
            arr[0]=under;
            arr[1]=upper;
            arr[4]=left;
            arr[5]=right;
        }
        //L代表向左滾動一次
        if(move.equalsIgnoreCase("L")){
            //123456
            //563421
            //前後不變
            arr[0]=upper;
            arr[1]=under;
            arr[4]=right;
            arr[5]=left;
        }
        //F表示向前翻轉1次
        if(move.equalsIgnoreCase("F")){
            //123456
            //125643
            //左右不變
            arr[2]=upper;
            arr[3]=under;
            arr[4]=back;
            arr[5]=front;
        }
        //B表示向後翻轉1次
        if(move.equalsIgnoreCase("B")){
            //123456
            //126534
            //左右不變
            arr[2]=under;
            arr[3]=upper;
            arr[4]=front;
            arr[5]=back;
        }
        //A表示逆時針旋轉90度
        if(move.equalsIgnoreCase("A")){
            //123456
            //431256
            //上下不變
            arr[0]=back;
            arr[1]=front;
            arr[2]=left;
            arr[3]=right;
        }
        //C表示順時針旋轉90度
        if(move.equalsIgnoreCase("C")){
            //123456
            //342156
            //上下不變
            arr[0]=front;
            arr[1]=back;
            arr[2]=right;
            arr[3]=left;
        }
    }





}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章