• 第三届蓝桥杯Java高职组决赛第三题


      题目描述:
    某少年宫引进了一批机器人小车。可以接受预先输入的指令,按指令行动。小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字)。
        例如,我们可以对小车输入如下的指令:
        15L10R5LRR10R20
        则,小车先直行15厘米,左转,再走10厘米,再右转,...
        不难看出,对于此指令串,小车又回到了出发地。
        你的任务是:编写程序,由用户输入指令,程序输出每条指令执行后小车位置与指令执行前小车位置的直线距离。
    【输入、输出格式要求】
        用户先输入一个整数n(n<100),表示接下来将有n条指令。
        接下来输入n条指令。每条指令只由L、R和数字组成(数字是0~100之间的整数)
        每条指令的长度不超过256个字符。
        程序则输出n行结果。
        每条结果表示小车执行相应的指令前后位置的直线距离。要求四舍五入到小数后2位。
        例如:用户输入:
             5
             L100R50R10
             3LLL5RR4L12
             LL
             100R
             5L5L5L5
             则程序输出:
             102.96
             9.06
             0.00
             100.00
             0.00
     
    分析:字符串处理,先将输入的字符串处理,字母和数字分开,然后模拟小车的动作,起点设为(0,0),终点设为(x,y)。然后4个方向,上左下右四个方向分别对应y+距离,x-距离,y-距离,x+距离。最后sqrt(x*x+y*y)得到结果,最后格式化输出保存两位小数【System.out.print("%.2f",结果);】
    
    
    代码:
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Scanner;
    
    
    public class test_2 {
    	public static int x=0;
    	public static int y=0;
    	//处理输入字符串,将不同命令放到List中
    	public static List<String> dispose(String str){
    		List<String> list = new ArrayList<String>();
    		String st = "";
    		for(int i=0;i<str.length();i++){
    			if(str.charAt(i)=='L' || str.charAt(i)=='R'){
    				list.add(""+str.charAt(i));
    				continue;
    			}
    			if(str.charAt(i)<='9' && str.charAt(i)>='0'){
    				if(i+1<str.length() && (str.charAt(i+1)<='9' && str.charAt(i+1)>='0')){
    					st+=""+str.charAt(i);
    				}
    				else{
    					st+=""+str.charAt(i);
    					list.add(st);
    					st="";
    				}
    			}
    		}
    		return list;
    	}
    	public static void change(List<String> list){
    		//1上,2左,3下,4右,默认是向前
    		int direction = 1;
    		for(String st:list){
    			if(st.equals("L")){
    				direction=direction%4+1;
    			}else if(st.equals("R")){
    				if(direction-1 == 0)
    					direction=4;
    				else
    					direction--;
    			}else{
    				move(direction,Integer.parseInt(st));
    			}
    		}
    	}
    	public static void move(int direction,int distance){
    		switch (direction) {
    			case 1:
    				y+=distance;
    				break;
    			case 2:
    				x-=distance;
    				break;
    			case 3:
    				y-=distance;
    				break;
    			case 4:
    				x+=distance;
    				break;
    		}
    	}
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		Scanner scanner = new Scanner(System.in);
    		int n = scanner.nextInt();
    		for(int i=0;i<n;i++){
    			x=0;y=0;
    			String st = scanner.next();
    			change(dispose(st));
    			System.out.printf("%.2f",Math.sqrt(x*x+y*y));
    		}
    		scanner.close();
    	}
    }
    
  • 相关阅读:
    Python读excel——xlrd
    markdown demo 学习
    Markdown 语法介绍
    安全学习概览——恶意软件分析、web渗透、漏洞利用和挖掘、内网渗透、IoT安全分析、区块链、黑灰产对抗
    诺基亚 IoT安全白皮书
    北京Uber优步司机奖励政策(4月17日)
    滴滴快车奖励政策,高峰奖励,翻倍奖励,按成交率,指派单数分级(4月17日)
    百度、腾讯和阿里内部的级别和薪资待遇是什么样的?
    成都Uber优步司机奖励政策(4月16日)
    北京Uber优步司机奖励政策(4月16日)
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3170145.html
Copyright © 2020-2023  润新知