解题思路:将k进制看作[0~k)个数,填入N个坑位中,可以重复,转换为深度优先搜索思想;
注意事项:当遇到第一个0时候,设置标记lastZero = true;连续遇到0时,选择跳过,而且第一个坑位不能是0
参考代码:
import java.util.Scanner;
public class Main
{
static int count = 0;//计数
static int[] nums;//存[0~k)个数
static int[] res;//将N位数结果记录
static int N,K;
static boolean lastZero = false;//标记遇到的第一个0
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
K = sc.nextInt();
nums = new int[K];
res = new int[N];
int step = 0;
for (int i = 0;i<K;i++) {
nums[i] = i;
}
dfs(nums,step);
System.out.println(count);
}
private static void dfs(int[] nums, int step) {
if (step == N )//当递归至已经存入N位数时
{
count++;
return;
}
for (int i = 0;i<K;i++)
{
if ((lastZero && i == 0) || step == 0 && i==0)//遇到连续两个0或者第一个存入数遇到0
{
lastZero = false;//回溯
continue;
}
if (i == 0)//遇到第一个0
lastZero = true;
else//没遇到0
lastZero = false;
res[step] = nums[i];
dfs(nums,step+1);
}
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复