zoukankan      html  css  js  c++  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

    /**
    *模拟机器人行走,用四个方向分别表示机器人行走的方向
    * sscanf(a+i,"%d",&cm);从字符串中读取数字 
    * 当读取数字是10位的时候 i++ 100的时候 在i++ 保证字符串的指向 
    */
    
    #include<stdio.h>
    #include<math.h>
    int dx[4]={-1,0,1,0};
    int dy[4]={0,-1,0,1};
    double f(char a[]){
    int x=0,y=0,dir=0,cm;
    for(int i=0;a[i]!='';i++){
    if(a[i]=='L')
    dir=(dir+3)%4;
    else if(a[i]=='R')
    dir=(dir+1)%4;
    else{
    sscanf(a+i,"%d",&cm); //从字符串中读取数字 
    if(cm>=10) i++; //10位数加 1 
    if(cm==100) i++;     //100位数在加 1 
    x=x+dx[dir]*cm;
    y=y+dy[dir]*cm;
    }
    }
    return sqrt(x*x+y*y);
    }
    int main(){
    int n;
    char a[100];
    while(scanf("%d",&n)){
    for(int i=0;i<n;i++){
    scanf("%s",a);
    printf("%.2lf",f(a));
    }
    }
    return 0;
    }
  • 相关阅读:
    #Kruskal算法 ——求最小生成树 ~20.8.17
    #最小生成树 #Prim算法 ——求最小生成树 ~20.8.15
    #Floyd #多源最短路 ~2020.08.15
    #Bellman-Ford最短路算法 #SPFA(spfa)算法 2020.08.14
    #单源最短路 #Dijkstra 学习心得 20.8.13
    #拓扑序列 学习心得 ~2020.08.13
    96.奇怪的汉诺塔
    95.费解的开关
    94.递归实现排列型枚举
    93.递归实现组合型枚举
  • 原文地址:https://www.cnblogs.com/sky-z/p/4411620.html
Copyright © 2011-2022 走看看