解题思路:将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分

0 人评分

C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:

一点编程也不会写的:零基础C语言学练课程

解决困扰你多年的C语言疑难杂症特性的C语言进阶课程

从零到写出一个爬虫的Python编程课程

只会语法写不出代码?手把手带你写100个编程真题的编程百练课程

信息学奥赛或C++选手的 必学C++课程

蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程

手把手讲解近五年真题的蓝桥杯辅导课程

评论列表 共有 0 条评论

暂无评论