蓝桥杯 算法提高 《产生数》 的java解是什么
时间: 2024-02-26 16:59:12 浏览: 15
以下是《产生数》的Java解法:
```java
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] a = new int[n + 1];
int[] b = new int[n + 1];
int[] c = new int[n + 1];
a[1] = 1; //初始化
b[1] = 1;
c[1] = 1;
for (int i = 2; i <= n; i++) {
a[i] = a[i - 1] + b[i - 1] + c[i - 1];
b[i] = a[i - 1] + c[i - 1];
c[i] = a[i - 1] + b[i - 1];
}
System.out.println(a[n] + b[n] + c[n]);
scanner.close();
}
}
```
该算法通过动态规划的方式求解,用三个数组a、b、c分别表示以1、2、3结尾的数的个数,然后根据递推式求解即可。
相关问题
蓝桥杯 算法训练 粘木棍 java
蓝桥杯算法训练中的粘木棍问题可以使用Java语言进行解决。根据给定的木棍长度和数量,我们可以创建一个数组来存储每个木棍的值。首先,将数组从小到大排序,然后从后向前取出最大的m个数,并将它们放入另一个数组中,以保持排序不变。接下来,循环遍历剩余的木棍,并将最小的数与最大的数相加并减小它们之间的差距。最后,输出粘贴后最大木棍和最小木棍的差值。
示例代码如下:
```java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] arr = new int[n];
int[] big = new int[m];
int cnt = 0;
for (int i = 0; i < n; i++) {
arr[i] = sc.nextInt();
}
Arrays.sort(arr);
int temp = m;
for (int i = n - 1; i >= 0; i--) {
big[--temp] = arr[i];
if (temp == 0) {
break;
}
}
for (int i = n - m - 1; i >= 0; i--) {
big[0] = arr[i];
Arrays.sort(big);
}
System.out.println(big[m - 1] - big[0]);
}
}
```
蓝桥杯算法训练java
很高兴你对蓝桥杯算法训练感兴趣!以下是一些可以帮助你学习蓝桥杯算法训练的资源:
1. 蓝桥杯官方网站:http://www.lanqiao.cn/
这是蓝桥杯比赛的官方网站,你可以在这里了解比赛的详情、历届比赛的题目和解答,以及蓝桥杯的培训机构等信息。
2. 蓝桥杯算法训练课程
蓝桥杯官方推出了一系列的算法训练课程,包括Java语言基础、数据结构与算法、高级算法等课程,这些课程都是由蓝桥杯的优秀选手和教练授课,非常适合想要提升自己算法能力的Java程序员学习。
3. 题目练习
蓝桥杯的题目非常有挑战性,但是通过不断的练习,你可以逐渐提高自己的算法水平。你可以在蓝桥杯官方网站上找到历届比赛的题目和答案,也可以在各大OJ平台上练习蓝桥杯相关的算法题目,比如LeetCode、AcWing、牛客网等。
4. 参加蓝桥杯比赛
最好的学习方法就是实战,参加蓝桥杯比赛可以让你更深入地了解算法和编程实战的经验,提高自己的水平。蓝桥杯比赛分为初赛和决赛两个阶段,初赛通常在每年的3月份举行,决赛则在每年的10月份举行,你可以在蓝桥杯官方网站上了解报名细节和比赛安排。
希望这些资源能够帮助你学习蓝桥杯算法训练,祝你取得好成绩!