TopCoder--2006年GOOGLE算法竞赛练习赛的题目第一题

原创 2006年06月15日 16:01:00

package topcoder;

// 这个程序是2006年TOPCODER的GOOGLE算法竞赛练习赛的题目第一题。
// 详情请看以下网址http://www.topcoder.com/gcjc_zh
/*
 * Created on 2005-11-24
 * @author Admin.zhouyuan
 */
class DrawLines
{
    public char[][] matrix;
    byte positionRow = 0;
    byte positionCol = 0;
    public byte direction;

    // 构造函数,把所有的点都置为DESERT, 方向置为DOWN.
    DrawLines()
    {
        matrix = new char[20][20];
        this.direction = 0;
        for (byte i = 0; i < 20; i++)
        {
            for (byte j = 0; j < 20; j++)
            {
                this.matrix[i][j] = '.';
            }
        }
    }

    String[] execute(String[] commands)
    {
        byte i; // 用做循环变量
        for (i = 0; i < commands.length; i++)
        {
            if (commands[i].charAt(0) == 'F') // 如果commands[i]第一个字符为'F', 则认为是FORWARD,向前移动.
            {
                Integer j;
                if (commands[i].length() == 10) // 把FORWARD后的数字转变为整数,传给j
                    j = new Integer(commands[i].substring(8, 10));
                else
                    j = new Integer(commands[i].substring(8, 9));

                switch (this.direction)
                // 判断方向,根据不同方向改变值为'GONE'
                {
                    case 0:
                        for (byte k = j.byteValue(); k > 0; k--)
                        {
                            this.positionRow += 1;
                            this.matrix[positionRow][positionCol] = 'X';
                        }
                        break;

                    case 1:
                        for (byte k = j.byteValue(); k > 0; k--)
                        {
                            this.positionCol += 1;
                            this.matrix[positionRow][positionCol] = 'X';
                        }
                        break;

                    case 2:
                        for (byte k = j.byteValue(); k > 0; k--)
                        {
                            this.positionRow -= 1;
                            this.matrix[positionRow][positionCol] = 'X';
                        }
                        break;

                    case 3:
                        for (byte k = j.byteValue(); k > 0; k--)
                        {
                            this.positionCol -= 1;
                            this.matrix[positionRow][positionCol] = 'X';
                        }
                        break;
                } // end switch
            } // end if
            else
            // 证明命令是LEFT,方向变化.
            {
                direction += 1;
                this.direction %= 4;
            }
        } // end for

        if (this.positionCol != 0 || this.positionRow != 0)
        {
            matrix[0][0] = 'X';
        }
        String[] str = new String[] { new String(matrix[0]), new String(matrix[1]), new String(matrix[2]), new String(matrix[3]),
                new String(matrix[4]), new String(matrix[5]), new String(matrix[6]), new String(matrix[7]),
                new String(matrix[8]), new String(matrix[9]), new String(matrix[10]), new String(matrix[11]),
                new String(matrix[12]), new String(matrix[13]), new String(matrix[14]), new String(matrix[15]),
                new String(matrix[16]), new String(matrix[17]), new String(matrix[18]), new String(matrix[19]) };
        return str;
    } // end execute

    public static void main(String[] args)
    {
        DrawLines dl = new DrawLines();
        // String[] str = new String[]{"FORWARD 19", "LEFT", "FORWARD 19", "LEFT", "FORWARD 19", "LEFT", "FORWARD 19"};
        // String[] str = new String[]{"LEFT", "LEFT", "LEFT", "LEFT", "LEFT", "LEFT", "LEFT", "LEFT"};
        // String[] str = new String[]{"FORWARD 1"};
        /*
         * String[] str = new String[]{"LEFT", "FORWARD 19", "LEFT", "LEFT", "LEFT", "FORWARD 18", "LEFT", "LEFT",
         * "LEFT", "FORWARD 17", "LEFT", "LEFT", "LEFT", "FORWARD 16", "LEFT", "LEFT", "LEFT", "FORWARD 15", "LEFT",
         * "LEFT", "LEFT", "FORWARD 14", "LEFT", "LEFT", "LEFT", "FORWARD 13", "LEFT", "LEFT", "LEFT", "FORWARD 12",
         * "LEFT", "LEFT", "LEFT", "FORWARD 11", "LEFT", "LEFT", "LEFT", "FORWARD 10", "LEFT", "LEFT", "LEFT", "FORWARD
         * 9", "LEFT", "LEFT", "LEFT", "FORWARD 8", "LEFT", "LEFT", "LEFT", "FORWARD 7"};
         */
        String[] s = dl.execute(new String[] { "LEFT", "FORWARD 19", "LEFT", "LEFT", "LEFT", "FORWARD 18", "LEFT", "LEFT",
                "LEFT", "FORWARD 17", "LEFT", "LEFT", "LEFT", "FORWARD 16", "LEFT", "LEFT", "LEFT", "FORWARD 15", "LEFT", "LEFT",
                "LEFT", "FORWARD 14", "LEFT", "LEFT", "LEFT", "FORWARD 13", "LEFT", "LEFT", "LEFT", "FORWARD 12", "LEFT", "LEFT",
                "LEFT", "FORWARD 11", "LEFT", "LEFT", "LEFT", "FORWARD 10", "LEFT", "LEFT", "LEFT", "FORWARD 9", "LEFT", "LEFT",
                "LEFT", "FORWARD 8", "LEFT", "LEFT", "LEFT", "FORWARD 7" });
        for (int i = s.length; i > 0; i--)
        {
            System.out.println(s[20 - i]);
        }
    } // end main
}

蓝桥杯第一届到第五届各组真题,官网练习题,个人练习习题

文件里面包含蓝桥杯第一届到第五届蓝桥杯各组的真题!还有蓝桥杯官网的部分练习题!还有一些个人的练习题目!每道题目都有答案,不过答案可能不严密或者是错误的!因为是本人个人写的!不保证正确!       ...
  • Two_Water
  • Two_Water
  • 2015年05月04日 07:25
  • 929

【算法竞赛入门经典】【第二章】课后习题

《 算法竞赛入门经典》课后题解,第二发来袭。持续更新中。。。
  • luomingjun12315
  • luomingjun12315
  • 2015年04月08日 14:04
  • 1739

【算法竞赛入门经典】【第三章】课后习题(第一部分)

《算法竞赛入门经典》【第三章】课后习题详解(第一部分) 包含 习题3-1 分数统计(stat) 习题 3-2 单词的长度(word) 习题3-3 乘积末三位 (product)...
  • luomingjun12315
  • luomingjun12315
  • 2015年04月09日 22:45
  • 1165

2014年第五届蓝桥杯决赛C组题目 第四题 标题:拼接平方数

第四题 标题:拼接平方数   标题:拼接平方数       小明发现49很有趣,首先,它是个平方数。它可以拆分为4和9,拆分出来的部分也是平方数。169也有这个性质,我们权且称它们为:拼接平方数。  ...
  • Two_Water
  • Two_Water
  • 2015年03月23日 08:57
  • 1244

算法竞赛入门经典第五章习题

注:以下代码均已ac,都是我自己敲的,仅供参考。如果有不合理的地方欢迎指正,如果有更好的方法欢迎交流。 1、 Uva 1593 题意:输入若干行代码,使得各行的第i个单词都是左对齐的,而且单词之间至...
  • chy2158798
  • chy2158798
  • 2016年02月10日 11:19
  • 254

算法竞赛入门经典(第2版)习题2-4详解

#include #define MAXN 100 double a[MAXN]={0};int main() { int n,m,count=0; while(1) { ...
  • big_DreamerLzq
  • big_DreamerLzq
  • 2016年06月22日 10:17
  • 1081

【Live Archive】7148 - LRIP【2014上海区域现场赛L】【树分治+线段树】

传送门:【Live Archive】7148 - LRIP#include #include #include #include #include #include #include u...
  • u013368721
  • u013368721
  • 2015年05月08日 20:06
  • 1082

leetcode部分题目(C++)

2016.3.19 88. Merge Sorted Array(从尾到头) MySubmissions Question TotalAccepted: 92780 Total Submiss...
  • yuxin6866
  • yuxin6866
  • 2016年07月30日 23:01
  • 322

算法竞赛入门经典(第2版)2.5注解与习题

p34 编程记录
  • qq_37589650
  • qq_37589650
  • 2017年04月18日 19:55
  • 161

杭电OJ题目 1000

欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和...
  • nxy006
  • nxy006
  • 2015年06月27日 20:49
  • 4324
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TopCoder--2006年GOOGLE算法竞赛练习赛的题目第一题
举报原因:
原因补充:

(最多只允许输入30个字)