[Code Jam] Get To Work

来源:互联网 发布:企业站cms哪个好 编辑:程序博客网 时间:2024/06/07 15:49

本题稍微复杂一点,虽然有许多解决方法,但是大体思路都是一样的。

 

CodeJam里的这类算法题本质可以总结如下

a. 用Readline方法读取input文件中的信息,对于复杂一点的结构,要应用到String类的几个方法,熟练掌握即可。

b. 数据存储方法的选择至关重要,当然可以像本题采取的长字符串一样存储,这要求熟练应用那几个方法。

    最容易想到的是数组或者类,这是一种比较“官方”和大众化的方法,不过确实有很好的效果。

    构建数据结构,要求熟练掌握基本的几种数据结构。

c. 对存储后的数据进行运算,循环是少不了的,至少要有两重循环,问题越复杂可能就涉及越多的循环。

d. 最后的代码中,50%以上是用来构建结构和存储数据的。

    也就是说,只有一小部分代码是最核心的算法,因此可以先拿较小的数据来测试算法的正确性。

 

在Java中全部代码如下:

 

 

有以下几点需要注意:

1. 题目中往往给出了变量的取值范围,实际在构造数组的时候,干脆就以这个最大数为范围构造就可以了。

    然后再用一个循环对数组初始化。

2. 全局变量和局部变量。这往往是最容易出错的部分,因此首先要确保每个变量的名称都有其可以推测的意义。

    在使用全局变量是,要注意在循环的末端重新初始化一下,否则结果就会完全错误。

3. 由于同一行不同数据往往是用空格分开的:

    Integer.parseInt(line.substring(0, line.indexOf(" ")));

    直接获取第一个空格之前的数字,这个命令常被用到。

4. 如何统计某一字符串中特点字符的个数?

      for (int t = 0; t < judge[j].length(); t++) {
       if (str.charAt(t) == '+')
        length++;
      }

     上例就是统计judge[j]中"+"字符的个数,用到的方法是charAt(String );

5. 一句话搞定数组排序:

    Arrays.sort(array);

    记得要引用Arrays包,也就是import java.util.Arrays;

    排序之后的数组是升序排列的,如果想要降序使用的话,在循环条件里改动一下就可以了:

           for (int k = length; sum2 < length; k--) {
        sum2 += array[k - 1];
        solution[j]++;
               }

    在本例中当sum累计的值大于或等于length时,循环停止。

    这是solution[j]记录的就是sum累计的次数,也就是累计的array成员的个数。

6. println 和 print在格式输出的灵活使用。

    包括System.out.print("/n");

 

 

原创粉丝点击