華爲機試題記錄1

import java.math.BigInteger;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.*;
public class Main {
	
	public static void main(String args[]){
		
		//isSameTree();
		//selectSeven();
		//namePretty();
		//treeBehind();
		//nikechesi();
		//recoverTree();
		//biggestScore();
		//songQuene1();
		//printDiffChar();
		//bigInt();
		//gdc();
		//zeroCount();
		//picsort();
		//delLeast();
		//bottle();
		//test();
		//move();
		//arraySort();
		//money();
		//separated();
		//change();
		//card();
		
		//findMoney();
		wordSort()	;
	}

	
	public static void isSameTree(){
		
		Scanner s= new Scanner(System.in);
		//判斷個數
		int num = Integer.valueOf(s.nextLine());
		//第一個序列
		String firstTreeStr = s.nextLine();
		//得到第一個序列的兩個子串,第一個子串全部小於串中第一個數字,第二個子串全部大於第一個數字,順序和原串相同
		
		String subFirstTreeStrSmall = devideTree( firstTreeStr,1);
		String subFirstTreeStrBig = devideTree( firstTreeStr,2);
		
//		System.out.println(subFirstTreeStrSmall);
//		System.out.println(subFirstTreeStrBig);
		String treeStr = s.nextLine();
		String subTreeStrSmall = devideTree( treeStr,1);
		String subTreeStrBig = devideTree( treeStr,2);
		
		ArrayList res = new ArrayList();
		
		while(!treeStr.equals("0")){
			
			if(subTreeStrSmall.equals(subFirstTreeStrSmall)&&subTreeStrBig.equals(subFirstTreeStrBig))
				 res.add("YES");
				 //System.out.println("YES");
			 else res.add("NO");//System.out.println("NO");
			
			
			 treeStr = s.nextLine();
			 subTreeStrSmall = devideTree( treeStr,1);
			 subTreeStrBig = devideTree( treeStr,2);
		}
		
		for(int i=0;i<num;i++){
			
			System.out.println(res.get(i));
			
			
		}
		
	}
	
	//分隔串函數,int i 代表,子串大於或小於第一個數字i小於,2大於
	public static String  devideTree(String treeStr,int i){
		
		String subStr = "";
		int length = treeStr.length();
		
		int firstStr = Integer.valueOf(treeStr.charAt(0)+"");
		if(i==1){
			
			for(int x = 1;x<length;x++){
				
				int nextStr = Integer.valueOf(treeStr.charAt(x)+"");
				if(nextStr<firstStr)
					subStr+=nextStr;
				
				
			}			
		}else if(i==2){
			for(int x = 1;x<length;x++){
				
				int nextStr = Integer.valueOf(treeStr.charAt(x)+"");
				if(nextStr>firstStr)
					subStr+=nextStr;
				
				
			}
		}
		
		
		
		return subStr;
		
	}
	
	//挑7
	public static void selectSeven(){
		
		Scanner s = new Scanner(System.in);
		
		int num = s.nextInt();
		
		int count=0;
		
		for(int i = 1;i<num;i++){
			
			if(i%7==0) {
				
				count++;
				continue;
			
			}
			
		    if(String.valueOf(i).contains("7")) {
				
				count++;
				continue;
			
			}
			
		}
		
		System.out.println(count);
		
	}
	
	
	//名字的漂亮度
	
	public static void namePretty(){
		
		Scanner s = new Scanner(System.in);
		
		int num = Integer.valueOf(s.nextLine());
		
		int sum = 0 ;
		
		HashMap<String ,Integer> hm = new HashMap<String ,Integer>();
		ArrayList<Integer> list = new ArrayList<Integer>();
		String resStr = "";
		while(sum!=num){
			hm.clear();
			list.clear();
			String name = s.nextLine();
			
			for(int i = 0;i<name.length();i++){
				
				String str = name.charAt(i)+"";
				if(hm.containsKey(str))
				hm.put(str, hm.get(str)+1);
				else hm.put(str, 1);
				
				
			}
			
			//System.out.println(hm);
			
			
			
			list.addAll(hm.values());
			
			Collections.sort(list);
			
			//System.out.println(list);
			
			int digital = 27-list.size();
			int result = 0;
			for(int x:list){
				
				result+= x*digital;
				digital++;
				
			}
			resStr+=result+"\n";
			sum++;
		}
		
		System.out.println(resStr);
		
		
		
		
		
	}
	
	//根據樹的前序中序,輸出後序
	
	public static void treeBehind(){
		
		Scanner n = new Scanner(System.in);
		
		while(true){
			
			String front = n.nextLine();
			String middle = n.nextLine();
			
			
			printTree(front,middle);
			System.out.println();
						
		}
		
		
	}
	public static String res="";
	public static void printTree(String front,String middle){
		
		
		int flength = front.length();
		int mlength = middle.length();
		//遞歸結束條件,當傳入字符爲空或者只有一個字符
		if(flength==0) return;
		
		else if(flength==1) {
			
			//System.out.print(front);
			res+=front;
			return;
			
			
		}
		
		//在前序序列中找到樹的根,爲前序序列的第一個字符
		String root = front.charAt(0)+"";
		//在中序序列中找到根的位置,按照根的位置分隔前序和後序字符串,然後將分隔的左子串和右子串傳入遞歸方法
		int mindex = middle.indexOf(root);
		if(mindex==-1)return;
		String subMidLeft = middle.substring(0, mindex);
		String subMidRight = middle.substring(mindex+1, mlength);
		
		String subFroLeft = front.substring(1, mindex+1);
		String subFroRight = front.substring(mindex+1, mlength);		
		
		//輸出左子樹
		printTree(subFroLeft,subMidLeft);
		//輸出右子樹
		printTree(subFroRight,subMidRight);
		//輸出根
		//System.out.print(root);
		res+=root;
	}
	
	//尼科徹斯定理 
	public static void nikechesi(){
		
		Scanner n = new Scanner(System.in);
		
		int num = n.nextInt();
		
		if(num<=1||num>=100){
			System.out.println("-1");
			return;
		}
		int i =0,j=0;
		for(i=(num*(num-1)+1);j<num-1;i+=2,j++){
			
			
			System.out.print(i+"+");
			
		}
		
		System.out.print(i);
		
	}
	
	public static void recoverTree(){
		
		Scanner n = new Scanner(System.in);
		
		while(true){
			int num = n.nextInt();
			String front = n.next();
			String middle = n.next();
			
			
			printTree(front,middle);
			//System.out.println(res);
			if(res.length()==num)
			System.out.println(res);
			else System.out.println("No");
			res="";
						
		}
		
	}
	
	//最高分是多少
	public static void biggestScore(){
		
		Scanner n = new Scanner(System.in);

			
			//第一行輸入
			String[] firstLine = n.nextLine().split(" ");
			//學生成績總數 操作總數
			int stuNum = Integer.valueOf(firstLine[0]);
			int funNum = Integer.valueOf(firstLine[1]);
			//學生成績放到int數組中
			String score = n.nextLine();
			
			String scoreArray[] = score.split(" ");

			String res = "";
			
			for(int i = 0;i<funNum;i++){
				
				String[] fun = n.nextLine().split(" ");
				
				//獲取操作數的第一,第二,第三個字符
				String a = fun[0];
				int b = Integer.valueOf(fun[1]);
				int c = Integer.valueOf(fun[2]);
				

				if(a.equals("Q")){
					
					int big = Integer.valueOf(scoreArray[b]);
					
					while(b>=stuNum) b--;//控制越界
					for(int j = b;j<=c;j++){
						
						if(Integer.valueOf(scoreArray[j])>big){
							
							big = Integer.valueOf(scoreArray[j]);
							
						}
					}
					//res+=big+"\n";
					
					System.out.println(big);
					
				}else if(a.equals("U")){
					
					scoreArray[b]=String.valueOf(c);
					
					
				}
			}
			
			//System.out.print(res);
		
			
		}
		//合唱隊
		public static void songQuene(){
			
			Scanner n = new Scanner(System.in);
			
			int num = Integer.valueOf(n.nextLine());
			String high = n.nextLine();
			
			String [] highArray = high.split(" ");
			
			int a[] = new int[num];
			int b[] = new int[num];
			
			for(int i=0;i<num;i++){
				a[1]=1;
				for(int j = 0;j<i;j++){					
					if(Integer.valueOf(highArray[i])>Integer.valueOf(highArray[j]))
						a[i]+=1;
				}
			}
			
			for(int i=0;i<num;i++){
				b[1]=1;
				for(int j = i+1;j<num;j++){					
					if(Integer.valueOf(highArray[i])>Integer.valueOf(highArray[j]))
						b[i]+=1;
				}
			}
			int res=0;
			for(int i=0;i<num;i++){
				if(a[i]+b[i]>res)
				
				res=a[i]+b[i];
				
			}
			
			System.out.println(res);
		}
		
		//合唱隊
				public static void songQuene1(){
					
					Scanner n = new Scanner(System.in);
					
					int num = Integer.valueOf(n.nextLine());
					String high = n.nextLine();
					
					String [] highArray = high.split(" ");
					
					int a[] = new int[num];
					int b[] = new int[num];
					
					for(int i=0;i<num;i++){
						a[i]=1;
						for(int j = 0;j<i;j++){					
							if(Integer.valueOf(highArray[i])>Integer.valueOf(highArray[j])&&(a[i]<a[j]+1))
								a[i]+=1;
						}
					}
					
					for(int i=num-1;i>-1;i--){
						b[i]=1;
						for(int j = num-1;j>i;j--){					
							if(Integer.valueOf(highArray[i])>Integer.valueOf(highArray[j])&&(b[i]<b[j]+1))
								b[i]+=1;
						}
					}
					int res=0;
					for(int i=0;i<num;i++){
						if(a[i]+b[i]-1>res)
						
						res=a[i]+b[i]-1;
						System.out.println(a[i]+"   " +b[i]+"   " +highArray[i]);
						
					}
					
					System.out.println(num-res);
				}
				
				
				//將字符串中不同字符的個數打印出來
				public static void printDiffChar() {
					
					Scanner n = new Scanner(System.in);
					
					String str = n.nextLine();
					
					
					ArrayList list = new ArrayList();
					
					for(int i=0;i<str.length();i++){
						
						String s = str.charAt(i)+"";
						
						if(!list.contains(s)) list.add(s);
						
					}
					
					System.out.println(list.size());
					

				}
				
				
				public static void bigInt(){
					Scanner n = new Scanner(System.in);
					
					String a= n.nextLine();
					
					String b = n.nextLine();
					
					
					BigInteger i = new BigInteger(a);
					BigInteger j = new BigInteger(b);
					
					BigInteger x = i.add(j);
					
					System.out.println(x);
					
					
					
					
					
				}
				
				//打印非素數
				public static void findNoPrime(){
					
					Scanner n = new Scanner(System.in);
					
					int num = n.nextInt();
					String result="";
					
					for(int i = 4;i<=num;i++){
						
						for(int j=2;j*j<=i;j++){
							
							if(i%j==0){
								
								result+=i+" ";
								break;
								
							}
							
							
						}
						
						
					}
					
					System.out.println(result);
					
					
					
					
				}
				//打印最大公約數
				public static void gdc(){
					
					Scanner n = new Scanner(System.in);
					int a = Integer.parseInt(n.next());
					int b=Integer.parseInt(n.next());
					
//					System.out.println(a);
//					System.out.println(b);
					
					//控制讓a>b
					int  temp=0;
					if(a<b){
						temp=a;
						a=b;
						b=temp;
					}
					int c=0;
					while(b!=0){
						
						c=b;
						b=a%b;
						a=c;
					}
					if(a<0)a=-a;
					System.out.println(a);
					
				}
				
				//二進制數中零的個數
				
				public static void zeroCount(){
					
					Scanner n = new Scanner(System.in);
					
					int a = n.nextInt();
					int flag=0;
					
					int count=0;
					int pos=0;
					for(int i=0;i<32;i++){
						
						flag=a&1;
						if(flag==0) count++;
						if(flag==1) pos=i;
						a=a>>1;
					}
					
					//System.out.println("count="+count+"    pos"+pos);
					int result=count-(32-(pos+1));
					System.out.println(result);
				}
				
				//圖片整理
				public static void picsort(){
					
					Scanner n = new Scanner(System.in);
					String s = n.nextLine();
					
					char[] c=s.toCharArray();
					
					Arrays.sort(c);
					
					for(int i=0;i<c.length;i++)
					
					System.out.print(c[i]);
					
					
				}
				
				//刪除字符串中出現次數最少的字符
				public static void  delLeast(){
					
					Scanner n = new Scanner(System.in);
					
					String s = n.nextLine();
					
					int []a = new int[26];
					for(int i=0;i<s.length();i++){
						
						int j=(s.charAt(i)-'a');//int j=s.charAt(i)-'a';完全是兩回事兒
						
						a[j]++;
						
					}
					int min=20;//這裏不能是min=a[0]有可能a[0]=0
					for(int i=0;i<26;i++){
						
						if(a[i]<min&&a[i]!=0) min=a[i];//一定要加上a[i]!=0
						
					}
					
					//System.out.println(min);
					for(int i=0;i<s.length();i++){
						
						char c = s.charAt(i);
						
						int x=(c-'a');
						//System.out.println(x);
						if(a[x]>min) System.out.print(c);
					}
					
					
				}
				
				//汽水瓶
				public static void bottle(){
					
					Scanner sn = new Scanner(System.in);
					
					int n=sn.nextInt();
					while(n!=0){
						int count=0;
						int b=0;int c=0;
						while(n>1){
							
							if(n==2) {
								count+=1;
								break;								
							}
							else{
								b=n/3;
								c=n%3;
								count+=b;
								n=b+c;
							}
						}
						
						System.out.println(count);
						n=sn.nextInt();
					}
					
					
					
				}
				
				public static void test(){
					
					Scanner n=new Scanner(System.in);
					while(n.hasNext()){
					
					int str = n.nextInt();
					
					
					//System.out.println(str.replaceAll("a",""));
					System.out.println(str);
					}
					
				}
				
				//座標移動
				public static void move(){
					
					Scanner n=new Scanner(System.in);
					
					String str = n.nextLine();
					
					String array[] = str.split(";");
					
					int x=0;int y=0;
					
					for(int i=0;i<array.length;i++){
						int orderLength = array[i].length();
						
						if(orderLength==3||orderLength==2){
							
							//System.out.println(array[i]);
							
							String firS = array[i].charAt(0)+"";
							
							String secS="";
							int sec1=48;
							int sec2=48;
							if(orderLength==3){
								secS = array[i].substring(1,3);
								 sec1 = (secS.charAt(0)+"").hashCode();
								 sec2 = (secS.charAt(1)+"").hashCode();
								
							}
							 
							else if(orderLength==2){
								 secS = array[i].substring(1,2);
								 sec1 = (secS.charAt(0)+"").hashCode();
							}
							
							//System.out.println(sec1+"   "+sec2);
							//A10;S20;W10;D30;X;A1A;B10A11;;A10;
							//if(firS.matches("A|D|W|S")&&sec1>=48&&sec1<=57&&sec2>=48&&sec2<=57){
							if(sec1>=48&&sec1<=57&&sec2>=48&&sec2<=57&&firS.equals("A")||firS.equals("D")||firS.equals("S")||firS.equals("W")){
								//System.out.println("-----------"+secS);
								if(firS.equals("A")){
									x-=Integer.parseInt(secS);									
								}else if(firS.equals("D")){
									x+=Integer.parseInt(secS);									
								}else if(firS.equals("W")){
									y+=Integer.parseInt(secS);									
								}else if(firS.equals("S")){																		
									y-=Integer.parseInt(secS);									
								}
							}
						}
						
					}
					System.out.println(x+","+y);
					
					
				}
				
				//整數排序
				public static void arraySort(){
					
					Scanner n = new Scanner(System.in);
					String str = n.nextLine();
					
					String array[] = str.split(",");
					//需要把字符型數組轉成整形數組
					int iarray[] = new int[array.length];
					
					
					
					for(int x=0;x<array.length;x++){
						iarray[x]=Integer.parseInt(array[x]);						
					}
					
					Arrays.sort(iarray);

					int i=0,j=1,a=0,b=0;
					while(j<iarray.length){
						a=iarray[i];
						b=iarray[j];
						
						int step=1;
						while(b==a+step) {
							
							j++;
							step++;
							if(j==iarray.length) break;
							b=iarray[j];
							
						}
						
						if(j==i+1) {
							
							 System.out.print(iarray[i]+" ");
							
						}
						else{
							System.out.print(iarray[i]+" "+iarray[j-1]+" ");
							if(j==iarray.length-1){
								System.out.print(iarray[j]+" ");
								break;								
							}
							
							
						}
						i=j;
						j=i+1;
					}
					
					
				}
				
				//整數排序2
				public static void arraySort2(){
					
					Scanner n = new Scanner(System.in);
					String str = n.nextLine();
					
					String array[] = str.split(",");
					//需要把字符型數組轉成整形數組
					int iarray[] = new int[array.length];
					
					
					
					for(int x=0;x<array.length;x++){
						iarray[x]=Integer.parseInt(array[x]);						
					}
					
					Arrays.sort(iarray);
					String result=iarray[0]+" ";
					int i=1;
					while(i<iarray.length-1){
						
						if(!((iarray[i]==iarray[i-1]+1)&&(iarray[i+1]==iarray[i]+1)))
							
							result+=iarray[i]+" ";
						i++;
						
					}
					result+=iarray[i]+" ";
					System.out.println(result);
					
				}
				
				//找零錢
				public static void money(){
					
					int n;
				     int a;
				     int b;
				     int c;
				     int d;
				     int e;
				     int f;
				     int g;
				     int s;
				     
				     Scanner sn = new Scanner(System.in);
				     n=sn.nextInt();
				     while(n!=0)
				     {
				    	 
				         s=0;
				         if(n==0)
				         {
				             break;        
				         }
				         if (n<1 || n>250)
				         {
				            continue;
				         }    
				         for(a=0;a<=n/100;a++)
				         for(b=0;b<=n/50;b++)
				         for(c=0;c<=n/20;c++)
				            for(d=0;d<=n/10;d++)
				             for(e=0;e<=n/5;e++)
				             for(f=0;f<=n/2;f++)
				             for(g=0;g<=n;g++)
				             {
				                    if( (n==a*100+b*50+c*20+d*10+e*5+f*2+g) && (a+b+c+d+e+f+g<=100) )
				                    {
				                        s++;    
				                        break;
				                    }

				             }
				         System.out.println(s);
				         n=sn.nextInt();
				     }
			        

					
				}
				
				//整數分隔
				public static void separated(){
					
					Scanner n = new Scanner(System.in);
					
					while(true){
						
						int num = n.nextInt();
						
						if(num>=1&&num<=1000000)
						
						System.out.println(ff(num)%1000000000);
						else System.out.println(-1);
					}
				}
				//這個方法棧溢出
				public static int f(int n){
					
					int result=0;
					if(n==1) result=1;
					else if(n%2==0) result=(f(n-1)+f(n/2))%1000000000;
					else if(n%2==1) result=(f(n-1))%1000000000;
					
					return result;
				}
				
				//利用數組存放所有結果
				public static int ff(int n){
					
					int result[]=new int[1000001];
					
					for(int i=1;i<1000001;i++){
						result[1]=1;
						if(i%2==0) result[i]=(result[i-1]+result[i/2])%1000000000;
						else if(i%2==1) result[i]=(result[i-1])%1000000000;
						
						
							
					}
					
					return result[n];
				}
				
				//字符轉換
				public static void change(){
					
					Scanner n = new Scanner(System.in);
					
					String str = n.nextLine();
					
					for(int i=0;i<str.length();i++){
						
						String s = str.charAt(i)+"";
						
						int x = s.hashCode();
						
						//System.out.println(x);
						if(x>=65&&x<=85) s=String.valueOf((char)(x+37));
						if(x>=86&&x<=90) s=String.valueOf((char)(x+11));
						
						System.out.print(s);
						
					}
					
					
					
				}
				
				//撲克牌大小
				public static void card(){
					
					Scanner n = new Scanner(System.in);
					
					String str = n.nextLine();
					
					int index = str.indexOf("-");

					String aa[] = str.substring(0,index).split(" ");
					String bb[] = str.substring(index+1,str.length()).split(" ");
					
					int a[] = changeCard(aa);
					int b[] = changeCard(bb);
					
					
					int al = a.length;
					int bl=b.length;
					
					if(al==2){
						if(a[0]==16||a[0]==17){
							System.out.println(str(aa));
							return;
						}else if(bl==4){							
							System.out.println(str(bb));
							return;
						}else if(bl==2){
							
							if(a[0]>b[0]) System.out.println(str(aa));
							else if(a[0]<b[0]) System.out.println(str(bb));
							return;
							
						}else  {
							System.out.println("ERROR");
							return;							
						}
					}
					else if(al==4){
						if(bl==2&&(a[0]==16||a[0]==17)){
							//System.out.println("here");
							//System.out.println(str(bb));
							return;							
						}else if(al==4){
							if(a[0]>b[0]) System.out.println(str(aa));
							else if(a[0]<b[0]) System.out.println(str(bb));
							return;
						}else {
							System.out.println(str(aa));
							return;	
						}
					}else if(al==bl){
						//System.out.println("here");
						System.out.println(a[0]+" "+b[0]);
						if(a[0]>b[0]) System.out.println(str(aa));
						else if(a[0]<b[0]) System.out.println(str(bb));
						return;
					}else{
						System.out.println("ERROR");
						return;								
					}
					
					
				}
				
				public static String str(String s[]){
					String result="";
					for(int i=0;i<s.length;i++){
						result+=s[i]+" ";
						
					}
					
					return result;
				}
				
				public static int[] changeCard(String s[]){
					
					int r[] = new int[s.length];
					
					for(int i=0;i<s.length;i++){
						if(s[i].equals("A")) r[i]=14;
						else if(s[i].equals("2")) r[i]=15;
						else if(s[i].equals("J")) r[i]=11;
						else if(s[i].equals("Q")) r[i]=12;
						else if(s[i].equals("K")) r[i]=13;
						else if(s[i].equals("joker")) r[i]=16;
						else if(s[i].equals("JOKER")) r[i]=17;
						else r[i]=Integer.parseInt(s[i]);
						
					}
					
					return r;
					
					
				}
				static int a[] = {1,2,5,10,20,50,100};
				public static void findMoney(){
					
					Scanner sc = new Scanner(System.in);
					int x= sc.nextInt();
					while(x!=0){
						int i=0;
						for(;i<7&&a[i]<=x;i++);
						i--;
						//System.out.println(i);
						System.out.println(getI(x,i));
						
						x=sc.nextInt();
						
					}
					
					
				}
				
				public static int getI(int x,int i){
					if(x<=1||a[i]==1)  return 1;
					
					else return getI(x-a[i],i)+getI(x,i-1);
					
					
					
					
				}
				
				//英文排序,其他不變
				public static void wordSort()				
				{
					
					Scanner n = new Scanner(System.in);
					
					while(n.hasNext()){
						
						String str = n.nextLine();
						ArrayList<Character> list = new ArrayList();
						
						char[] strArray = str.toCharArray();
						
						for(int i=0;i<strArray.length;i++){
							
							if((strArray[i]>='a'&&strArray[i]<='z')||(strArray[i]>='A'&&strArray[i]<='Z')){
								
								list.add(strArray[i]);
								strArray[i]='\0';								
							}
							
							
						}
						
						Collections.sort(list);
						System.out.println(list);
						int j=0;
						String result="";
						for(int i=0;i<strArray.length;i++){
							
							if(strArray[i]=='\0'){
								
								strArray[i]=list.get(j);
								j++;
								
							}
							result+=strArray[i];
							System.out.println(i);
						}
						
						System.out.println(result);
						
					}
					
					
				}
	
}

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