【知识点详解】
1. **Java基础**
- 变量声明与赋值:在Java中,`int n=777;`用于声明一个整型变量`n`并初始化为777。在循环和条件判断中,都会用到变量的修改。
- 循环结构:题目中的`for`循环用于遍历和计算,如`for(int i=1;i<=12;i++)`,这是一个典型的计数循环。
- 条件判断:`if(i%2!=0)`用来判断是否为奇数,通过模运算 `%` 获取余数。
- 数组操作:数组`sum[]`在第二题中用于存储每层煤球的累加和,`sum[i]`用于存储第`i`层的煤球数量。
- 输入/输出:`Scanner`类在第三题中用于获取用户输入,`System.out.println()`用于输出结果。
2. **Java进阶**
- 方法调用:`gcd(int a, int b)`方法用于计算最大公约数,是解决第四题的关键,它使用递归实现。
- 遍历组合:第四题中,使用三层嵌套的`for`循环遍历所有可能的骰子组合,寻找满足条件的情况。
- 条件判断优化:在第四题的条件判断中,`if(i + j+2 == k+1 || i + k+2 == j+1 || k + j+2 == i+1)`用于检查三个骰子的数字关系,确保有一个骰子的数字等于其他两个的和。
- 分母的最大公约数:为了得到精确的概率分数,需要找到分子和分母的最大公约数`gcd`,以简化分数。
3. **算法应用**
- 动态规划:虽然题目没有明确指出,但第三题的解决方案可以看作是动态规划的一个实例,每次迭代计算数字的平方和,直到找到循环或者达到某个终止条件。
- 递归:计算最大公约数`gcd`使用了递归,这是解决问题的一种常见策略,尤其在处理数学问题时。
- 排列组合:第五题实际上涉及到组合问题,尽管代码直接列举了所有可能的组合,而没有使用组合计算的方法。
4. **编程规范**
- 注释:尽管题目中没有要求添加注释,但在实际开发中,良好的注释能够帮助理解和维护代码。
- 输出格式:题目要求输出的结果仅包含数字,无多余内容,这体现了编程中对于输出格式的严谨性。
5. **语言对比**
- Java与JavaScript:虽然题目标签中包含了`JavaScript`,但题目内容完全基于Java,没有涉及JavaScript的特性。不过,Java和JavaScript都是常用的编程语言,它们在语法上有一定的相似性,但用途和环境不同,Java主要用于服务器端开发,而JavaScript主要应用于前端开发。
6. **问题解答技巧**
- 对于这类编程竞赛题,理解题意是关键,然后根据需求设计算法,最后编写代码实现。在编程过程中,需要考虑到边界条件、异常处理和效率优化等因素。
总结,本题涵盖了Java的基础语法、条件判断、循环结构、数组操作、递归、动态规划以及组合问题等多方面的知识点,适合提升Java编程能力和算法思维。