解题思路:
主要还是通过找规律去写
本来已经写了一次了 结果手贱点了一下编辑模式 被清空了
以 k=10为例
当n=1时,有效数为9
当n=2时,有效数为90
当n=3时,有效数为821
当n=4时,有效数为8829
通过以上的列举其实可以发现当n>=3时,每一个有效数都是前两个之和去乘以(k-1)
通过思考就可以找到其中的原因有效数的要求是数字中不能有连续有两个或两个以上的0
当n=3时,首项不可能为0,当第二个数为0的时候,其实就是n=2的有效数,当第三个数为0的时候,其实就是n=1的有效数,两个相加再乘以(k-1)就是本身的有效数
以此类推就可以算出之后的有效数字了
用数组表示就好
注意事项:
参考代码:
import java.util.Scanner;
public class java03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int k = scanner.nextInt();
int[] sum = new int[n + 1];
for (int i = 1; i <= n; i++) {
if (i == 1)
sum[i] = k - 1;
else if (i == 2)
sum[i] = k * (k - 1);
else
sum[i] = (sum[i - 1] + sum[i - 2]) * (k - 1);
}
System.out.print(sum[n]);
}
}
0.0分
2 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复