zoukankan      html  css  js  c++  java
  • 51nod 1995 三子棋

    题目来源: syu校赛
    基准时间限制:1 秒 空间限制:131072 KB 分值: 0 难度:基础题
     收藏
     关注

    小的时候大家一定玩过“井”字棋吧。也就是在九宫格中,只要任意行、列,或者任意连续对角线上面出现三个相同的,就能获胜。现在小明和小花也在玩三子棋,但是他们不是在九宫格里,而是在3×4的格子里面。现在小明先下,但是他知道小花这个人很聪明,他想知道第一步下在哪一个地方最合适,你能帮帮他吗?



    Input
    第一行输入一个整数T,表示数据组数(1<T<10000); 
    第二行输入两个整数x,y,表示3×4格子里面的一个坐标(x,y)(1<=x<=3,1<=y<=4);
    Output
    每组数据输出最后小明输赢的结果,如果小明一定能赢,第一行输出“Win”,第二行输出小明所需要花的最少步数;如果小明跟小花只能打成平手,第一行输出“Equal”,第二行输出数字0;如果小明不能赢也不能跟小花打成平手,第一行输出“Lose”,第二行输出小花赢小明所需要花的最少步数。

    Input示例
    2
    2 1
    2 4
    Output示例
    Equal
    0
    Equal
    0


    打表找规律题:借用隔壁博客一张图:




    由于时3x4的表格,所以都是对称的,只需要考虑左上角4个表格,可以知道表格中2,4时同一类,且获胜走的步数时4

    表格3明显时打平的位置,位置1找一下规律,发现最少步数是6,这样扩展到其他的表格中即可求得答案!


    #include<iostream>
    using namespace std;
    int qi[4][5];
    
    void init()
    {
        qi[1][1]=qi[1][4]=qi[3][1]=qi[3][4]=6;
        qi[1][2]=qi[1][3]=qi[2][2]=qi[2][3]=qi[3][2]=qi[3][3]=4;
        qi[2][1]=qi[2][4]=0;
    }
    int main()
    {
        int t;
        int x,y;
        init();
        cin>>t;
        while(t--)
        {
            cin>>x>>y;
            if(qi[x][y]==0)
            {
                cout<<"Equal"<<endl;
                cout<<0<<endl;
            }
            else if(qi[x][y]==4)
            {
                cout<<"Win"<<endl;
                cout<<4<<endl;
    
            }
            else if(qi[x][y]==6)
            {
                cout<<"Win"<<endl;
                cout<<6<<endl;
            }
    
        }
        return 0;
    }


  • 相关阅读:
    JavaScript 检测浏览器更多信息【每日一段代码66】
    JavaScript throw 声明【每日一段代码64】
    JavaScript 计时器2 【每日一段代码73】
    JavaScript 按钮动画【每日一段代码70】
    JavaScript 检测浏览器【每日一段代码67】
    JavaScript 使用计时事件制作的钟表 【每日一段代码76】
    一个实现恢复删除机制(do undo)的设计
    基于邻接表的广度优先搜索遍历
    HDU1045 Fire Net
    深度遍历
  • 原文地址:https://www.cnblogs.com/bryce1010/p/9387046.html
Copyright © 2011-2022 走看看