• 华为OJ机试训练(一)


    题目1 ——

    通过输入英文句子。将每一个单词反过来,标点符号顺序不变。非26个字母且非标点符号的情况就可以标识单词结束。

    标点符号包含,.!?

    比如输入:Hello, I need an apple.

    输出:

    /**
     * 华为机试训练1: 通过输入英文句子,将每一个单词反过来。标点符号顺序不变。非26个字母且非标点符号的情况就可以标识单词结束。 标点符号包含,.!?
     * Hello, I need an apple.
     * 
     * @author snail
     * 
     */
    public class Main {
    	public static void main(String[] args) {
    		Scanner scanner = new Scanner(System.in);
    		String string = scanner.nextLine();
    		scanner.close();
    		String[] ssString = string.split("\W+");
    		String[] s2 = string.split("\w+");
    
    	int wordsNum = ssString.length;
    	for (int i = 0; i < wordsNum; i++) {
    
    	if (s2.length >= wordsNum) {
    		int j = ssString[i].length() - 1;
    		for (; j > -1; j--) {
    			System.out.print(ssString[i].charAt(j));
    		}
    		System.out.print(s2[i + s2.length - wordsNum]);
    	} else {
    
    	System.out.print(s2[i - s2.length + wordsNum]);
    	int j = ssString[i].length() - 1;
    	for (; j > -1; j--) {
    		System.out.print(ssString[i].charAt(j));
    	}
    	}
    
    	}
    	System.out.println();
    	}
    
    }

    题目2——

    实现“十七进制”转“十进制”算法:输入一个十七进制数字的字符串(字母一律大写),输出这个数值相应的十进制结果。达到进制转换目的,范围:0-0xFFFFFFFF。


    我的程序——

    /**
     * 实现“十七进制”转“十进制”算法:
     * 输入一个十七进制数字的字符串(字母一律大写),
     * 输出这个数值相应的十进制结果,达到进制转换目的,
     * 范围:0-0xFFFFFFFF。

    * @author snail * */ public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String string = scanner.nextLine(); scanner.close(); double result = 0; int length = string.length(); double temp = 0; char tempChar = '0'; int bitvalue = 0; for (int i = 0; i < length; i++) { tempChar = string.charAt(length -i-1); if (!Character.isDigit(tempChar)) { if (tempChar>=0x40 && tempChar <=0x46) { bitvalue = tempChar - 0x41 +10; }else { bitvalue = tempChar - 0x61 +10; } }else { bitvalue = tempChar - 0x30; } temp = bitvalue * Math.pow(17, i); result += temp; } System.out.println(result); } }


    题目3——

    状态机——

    背景:状态机在计算机各个领域中使用很广泛。最简单的状态机包括一组状态集(states)、一个起始状态(start state)、状态间转换条件(transition condition)。

     

    要求:依据定义的脚本构造出状态机,并依据脚本进行状态迁移,或输出状态。

     

    脚本包括例如以下keyword 

    Insert  插入状态或迁移条件

    语法是Insert 状态1,状态2,条件1

    第一条Insert语句的第一个状态默觉得状态机的起始态。

    假设状态1或状态2不存在,则新增状态1或状态2,假设状态1在条件1下已经存在其它迁移状态,则Insert失败。并输出Error字符串。

     

    Delete 删除状态或迁移条件, 

    语法是Delete 状态1/条件1

    当删除状态1时。状态1所关联的全部条件全被删除,Delete起始态将删除整个状态机,删除当前活动状态时,无效并输出Error字符串,删除的条件或状态不存在,输出Error字符串。 

    Input 状态机接收新条件 

    语法是 Input 条件1

    当前状态在条件1下有正确的迁移状态时。状态机迁移到下一个状态,假设在条件1下没有正确的迁移状态时。保持在当前状态,并输出Error字符串;假设当前状态机没有状态。相同输出Error字符串。

     

    Output 输出当前状态 

    语法是Output。假设当前状态机不存在。输出Error字符串,否则输出当前状态名.

      End 结束命令 

    语法是End。收到该命令,脚本执行结束,忽略后面的脚本

     

      说明:输入脚本命令正确,不用考虑异常情况

    例子输入:

    Insert Sa,Sb,C1
    Insert Sb,Sc,C2
    Insert Sb,Sd,C3
    Insert Sc,Se,C4
    Insert Sd,Se,C5
    Insert Se,Sa,C6
    Input C1
    Delete Sc
    Input C2
    Output
    Input C3
    Output
    End


    输出是 :

     

    Error
    Sb
    Sd



    我的程序——感觉写得非常垃圾,没有找到合适的方法来表示这个状态。懂的朋友请指点下。

    package tree.test;
    
    import java.util.ArrayList;
    import java.util.Scanner;
    
    /**
     * 状态机
     * 20:03 
     * @author snail
     * 
     */
    public class Main {
    	private static ArrayList<Status> statusList = new ArrayList<Main.Status>();
    	private static String currentStatus ;
    	 private static Status firstStatus ;
    	public static void main(String[] args) {
    		Scanner scanner = new Scanner(System.in);
    		String string = "";
    		ArrayList<String> inputList = new ArrayList<String>();
    		while(!(string=scanner.nextLine()).equals("End")){
    			inputList.add(string);
    		}
    		int length = inputList.size();
    		String temp = "";
    		for (int i = 0; i < length; i++) {
    			temp = inputList.get(i);
    			if (temp.contains("Insert")) {
    				insert(temp);
    				
    			}else if (temp.contains("Delete")) {
    				delete(temp);
    				System.out.println("debug-Delete --剩下"+statusList.size());
    			}else if (temp.contains("Input")) {
    			
    				input(temp);
    				System.out.println("当前状态:"+currentStatus.toString());
    			}else if (temp.contains("Output")) {
    				output();
    				//System.out.println("Output"+statusList.toString());
    			}
    		}
    		
    		System.out.println();
    	}
    	
    	private static void insert(String string){
    		String[] ss = string.split(" "); 
    		String dataString = ss[1];
    		String[] insertStrings = dataString.split(",");
    		String currentString = insertStrings[0];
    		String nextString = insertStrings[1];
    		String requireString = insertStrings[2];
    		int size = statusList.size();
    		boolean existFlag = false;
    		for (int i = 0; i < size; i++) {
    			if (statusList.get(i).getCurrentStatus().equals(currentString)&&
    					statusList.get(i).getRequireString().equals(requireString)&&
    					!statusList.get(i).getNextStatus().equals(nextString)
    					 ) {
    				existFlag = true;
    				break;
    			}
    		}
    		if (existFlag) {
    			System.out.println("Error");
    			return ;
    		}else {
    			Status status = new Status();
    			status.setCurrentStatus(currentString);
    			status.setRequireString(requireString);
    			status.setNextStatus(nextString);
    			if(statusList.size() == 0){
    				firstStatus = status;
    				currentStatus = currentString; 
    			}
    			statusList.add(status);
    			
    		}
    		
    	}
    	
    	/**
    	 * 删除
    	 * @author snail
    	 *
    	 */
    	private static void delete(String string){
    		String[] ss = string.split(" "); 
    		String deleteString = ss[1];
    	
    		if (deleteString == currentStatus) {
    			System.out.println("Error");
    			return ;
    		}else if(deleteString == firstStatus.getCurrentStatus()){
    			statusList.clear();
    			return ;
    		}
    	
    
    		for (int i = 0; i < statusList.size(); i++) {
    			Status status = statusList.get(i);
    			//删除状态
    			if (status.getCurrentStatus().equals(deleteString)) {
    				for (int j = 0; j < statusList.size(); j++) {
    					if (statusList.get(j).getNextStatus().equals(deleteString)) {
    						statusList.get(j).setRequireString("");//删除有关的条件
    						//statusList.remove(j);
    					}
    				}
    				statusList.remove(i);
    				return ;
    			}
    			//删除条件
    			if (status.getRequireString().equals(deleteString)) {
    				
    				statusList.remove(i);
    				return ;
    			}
    		}
    	
    		//不存在
    		System.out.println("Error");
    		return ;
    	}
    	
    	private static void input(String string){
    		String[] ss = string.split(" "); 
    		String inputString = ss[1];
    		if (currentStatus == null) {
    			System.out.println("debug-input -- null");
    			System.out.println("Error");
    			return ;
    		}
    		ArrayList<Status> currentList = new ArrayList<Main.Status>();
    		for (int i = 0; i < statusList.size(); i++) {
    			if (statusList.get(i).currentStatus.equals(currentStatus)) {
    				currentList.add(statusList.get(i));
    			}
    		}
    		boolean exist = false;
    		for (int i = 0; i < currentList.size(); i++) {
    			//System.out.println("debug-input --require:"+currentStatus.requireString+",input :"+inputString);
    			if (currentList.get(i).requireString.equals(inputString) ) {
    				String nextString = currentList.get(i).getNextStatus();
    			//	System.out.println("debug-input -- 当前状态中有该条件");
    				//System.out.println("debug-input -- 下一个状态是"+nextString);
    				int size = statusList.size();
    				
    				
    				//寻找下一个状态
    				for (int j = 0; j < size; j++) {
    					if (statusList.get(i).getCurrentStatus().equals(nextString)) {
    						currentStatus = statusList.get(j).getCurrentStatus();
    						exist = true;
    						break;
    					}
    				}
    				
    		}
    		
    			if (exist) {
    				return ;
    			}else {
    				
    			//	System.out.println("debug-input -- 没有该迁移状态");
    				System.out.println("Error");
    				return ;
    			}}
    		{
    				//System.out.println("debug-input -- 没有该迁移条件");
    				System.out.println("Error");
    				return ;
    			}	
    			
    		
    	}
    	
    	private static void output(){
    		if (currentStatus == null) {
    			System.out.println("Error");
    			return ;
    		}else {
    			System.out.println(currentStatus);
    			return ;
    		}
    	}
    	
    	public static class Status{
    		private String currentStatus;
    		private String requireString;
    		private String nextStatus;
    		public String getCurrentStatus() {
    			return currentStatus;
    		}
    		public void setCurrentStatus(String currentStatus) {
    			this.currentStatus = currentStatus;
    		}
    		public String getRequireString() {
    			return requireString;
    		}
    		public void setRequireString(String requireString) {
    			this.requireString = requireString;
    		}
    		public String getNextStatus() {
    			return nextStatus;
    		}
    		public void setNextStatus(String nextStatus) {
    			this.nextStatus = nextStatus;
    		}
    		@Override
    		public String toString() {
    			return "Status [currentStatus=" + currentStatus
    					+ ", requireString=" + requireString + ", nextStatus="
    					+ nextStatus + "]";
    		}
    		
    		
    	}
    }
    









  • 相关阅读:
    LeetCode 11. Container With Most Water
    LeetCode 10 Regular Expression Matching
    LeetCode 9 Palindrome Number
    LeetCode 8 String to Integer (atoi)
    从ASP.NET Core 3.0 preview 特性,了解CLR的Garbage Collection
    HttpClient参观记:.net core 2.2 对HttpClient到底做了神马
    LeetCode 7 Reverse Integer
    《地久天长》观影笔记
    《小丑》观后感
    粒子群基本算法学习笔记
  • 原文地址:https://www.cnblogs.com/yxwkf/p/5215260.html
Copyright © 2020-2023  润新知