zoukankan      html  css  js  c++  java
  • 练习 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;

    
    
    
    
    
  • 相关阅读:
    架构之美阅读笔记05
    架构之美阅读笔记04
    已经导入到VS工具箱中的DevExpress如何使用
    C#中遇到的方法总结
    vs下C# WinForm 解决方案里面生成的文件都是什么作用?干什么的?
    ssh关于含有外键的传值中无法识别正确的action的原因和解决办法
    MVC模式在Java Web应用程序中的实例分析
    浅谈对MVC的理解
    简述23种设计模式
    浅谈对可用性和易用性的认识以及对如何增加系统功能的理解
  • 原文地址:https://www.cnblogs.com/hnzyyTl/p/4928466.html
Copyright © 2011-2022 走看看