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;
}
}
}