zoukankan      html  css  js  c++  java
  • T

    题意:有四种命令:U代表上移一个单位,D代表下移一个单位,R代表右移一个单位,L代表左移一个单位。

    现在给出一串命令,问怎样修改命令中的任意一条命令,使得命令结束后重新返回原点,并且修改的步数最少。

    思路:把问题抽象化,统计四中命令各自有多少,之后D与U相互抵消(numD-numU),R与L相互抵消(numR-numL),将两个差值的绝对值相加之后除以二就是结果。

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    void f(int *x,int *y){
    if(*x>=*y){
    (*y)++;
    }
    if(*x<*y){
    (*x)++;
    }
    }
    void g(int *x,int *y){
    if(*x>=*y){
    (*x)--;
    }
    if(*x<*y){
    (*y)--;
    }
    }
    int main(){
    char str[100500];
    gets(str);
    int i,len=strlen(str),l=0,r=0,d=0,u=0;
    int rslt=0;
    if(len%2!=0){
    printf("-1 ");
    return 0;
    }
    else for(i=0;i<len;i++){
    if(str[i]=='L')l ++ ;
    if(str[i]=='R')r ++;
    if(str[i]=='U')u++;
    if(str[i]=='D')d++;
    }
    if((l+r)%2!=0){
    f(&l,&r);
    g(&u,&d);
    rslt++;
    }
    rslt+=(abs(l-(l+r)/2)+abs(u-(d+u)/2));
    printf("%d ",rslt);
    return 0;
    }

    void函数是判断l+f 是奇数时,将其换成偶数 而不增加补数

    这是通过的代码 ,但起初结果死活不对  后来发现是因为函数中写的是*x++ 而++的优先级是比*高的,自然就不对了

    but,看了别人才发现完全不用这么复杂好吧

    如果l+f为奇数结果会在偶数的基础上增加一步,而     rslt+=(abs(l-(l+r)/2)+abs(u-(d+u)/2))的值此时也加一,所以判断奇数偶数完全没有必要, 结果是一样的

    改进后

    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int  main(){
         char  str[100500];
         gets(str);
         int i,len=strlen(str),l=0,r=0,d=0,u=0;
         int  rslt=0;
         if(len%2!=0){
            printf("-1
    ");
            return 0;
         }
         else for(i=0;i<len;i++){
            if(str[i]=='L')l ++ ;
            if(str[i]=='R')r ++;
            if(str[i]=='U')u++;
            if(str[i]=='D')d++;
         }
    
         rslt+=(abs(l-(l+r)/2)+abs(u-(d+u)/2));
         printf("%d
    ",rslt);
         return 0;
    
  • 相关阅读:
    2018前端工程师成长路线图
    ECMAScript正则表达式6个最新特性
    Fundebug前端JavaScript插件更新至1.2.0
    写给前端工程师的10条实用原则
    代码面试需要知道的8种数据结构(附面试题及答案链接)
    20个Chrome DevTools调试技巧
    Web应用架构入门之11个基本要素
    配置Tree Shaking来减少JavaScript的打包体积
    SQL Server全文搜索(转载)
    ASP.NET Core多语言 (转载)
  • 原文地址:https://www.cnblogs.com/-ifrush/p/10084384.html
Copyright © 2011-2022 走看看