• 练习 hdu 5523 Game


    问题描述
    XY在玩一个游戏:有N根柱子排成一排,编号为1到N,每个柱子上面有一块宝石,现在XY站在第S根柱子上,出口在第T跟柱子上,XY需要拿到所有宝石后从出口离开。每次XY可以走到相邻的柱子上,也可以使用超能力跳到第一根柱子或者第N根柱子上,如果离开了柱子之后再也不能到达这里。为了节省能量,XY想用最少次数超能力通关。
    输入描述
    输入有多组数据,不超过1000组.
    每组数据输入一行包含3个整数,N,S和T.(1leq Nleq10000,1leq S,Tleq N )(1N10000,1S,TN)
    输出描述
    对于每组数据输出一行,表示使用超能力的最少次数,如果不可能离开,输出-1.
    输入样例
    4 1 4
    4 1 3
    
    输出样例
    0
    1

    这题只要分情况讨论就好:
    无解的情况只有起点和终点位置一样且N不为1。终点和起点都在边界上答案为0,如果起点在边界上或者起点终点相邻答案为1,其他答案为2.
    #include <iostream>
    #include <cstdio>
    #include <memory.h>
    #include <algorithm>
    using namespace std;
    int n,s,t;
    int main()
    {
        while(~scanf("%d%d%d",&n,&s,&t)){
            if(n == 1){
                printf("0
    ");
            }else if(s == t)
                printf("-1
    ");
            else if((t == 1 &&s==n)||(s==1&&t==n)){
                    //if(s==n||s==1)
                        printf("0
    ");
                   // else{
                   //     printf("2
    ");
                   // }
            }else if(s == 1||s==n){
                printf("1
    ");
            }else if((s-t==1||s-t==-1)){
                printf("1
    ");
            }else{
                printf("2
    ");
            }
    
        }
        return 0;
    }
    之前一直wa 没想清楚 wa代码是这样的:
    #include <iostream>
    #include <cstdio>
    #include <memory.h>
    #include <algorithm>
    using namespace std;
    int n,s,t;
    int main()
    {
        while(~scanf("%d%d%d",&n,&s,&t)){
            if(n == 1){
                printf("0
    ");
            }else if(s == t)
                printf("-1
    ");
            else if(t == 1 t==n){
                    if(s==n||s==1)
                        printf("0
    ");
                    else{
                        printf("2
    ");
                    }
            }else if(s == 1||s==n){
                printf("1
    ");
            }else if((s-t==1||s-t==-1)){
                printf("1
    ");
            }else{
                printf("2
    ");
            }
    
        }
        return 0;
    }
    
    

    后来才发现  :

      else if(t == 1 t==n){
                    if(s==n||s==1)
                        printf("0
    ");
                    else{
                        printf("2
    ");
                    }

    这一段代码有问题,因为 t == 1,s==2 那么输出的是1;

    
    
    
    
    
  • 相关阅读:
    javascript闭包
    Anaconda快速加载opencv
    Opencv3.0python: 编译报错color.cpp:7456: error: (215) scn == 3 || scn == 4 的解决方案
    Vivado 调用自定义IP核
    Xilinx与modelsim的仿真联调
    Altera三速以太网IP核使用(上篇)之快速仿真
    opencv+python视频实时质心显示
    FPGA千兆网UDP协议实现
    MySql添加数据语句
    聚合函数 及执行机理
  • 原文地址:https://www.cnblogs.com/hnzyyTl/p/4928466.html
Copyright © 2020-2023  润新知