解题思路: 1、理解题目
(1)k-进制:就是长度>2的数字不能以0开头,而且中间的数字不能有两个连续的0
(2)接下来就是在指定的数字范围内寻找 k-进制 ,这个指定范围嘞就是n长度,k进制来指定的,n,k咋描述呢,就是长度=n,是k进制的一个数。
比如:n = 2,k=10的时候,就是长度=2的数,而且这个数是10进制的数字。所以,这个数的范围就是10-99。
2、制定方案
(1)思路:这里我的想法是把数字一个一个的列出来,然后再寻找满足条件的数字,再进行统计。
(2)问题1:那怎么把数字一个一个的列出来勒,那就是加法啊,比如n=2,k=10,范围是10-99,那我每次+1,是不是可以把10-99的数字全部列出来,那这里把数字一个一个的列出来已经有思路勒,就是+1。
(3)问题2:那还有一个问题就是:进制的范围是 2 <= k <= 10 啊,怎么+1啊。这个好办,我们10进制是不是从0开始数,然后是逢10进1,那2 进制就是逢2进1,3进制就是逢3进1。计算的问题就这样解决了。
(4)问题3:那我怎么把+1之后的结果保存起来,这个就可以用一个Int数组了。前面不是声明了数字的长度了嘛,然后这个数字的长度就可以是数组的长度了,数组的最后一个是个位...
3、算法的退出条件:当数字准备从n位 变成 n+1的时候就是结束了。
4、isFull()这个方法是判断数字是否还在n长度的范围内,add()这个是+1,kBaseSystem()判断该数字是否是 k-进制数
注意事项: 无有
参考代码:
public Main{ private static int count = 0; public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); int k = scanner.nextInt(); int baseSystem[] = new int[n]; if (n > 1) baseSystem[0] = 1; base(baseSystem,k); System.out.println(count); } public static void base(int base[],int sys){ while (!isFull(base,sys)){ add(base,sys); } } public static boolean isFull(int base[],int sys){ if (kBaseSystem(base)){ count++; } for (int i = 0; i < base.length; i++) { if (base[i] != (sys-1)) return false; } return true; } public static void add(int base[],int sys){ int remainder = -1,index = base.length-1; do{ if (index > -1){ base[index] += 1; remainder = base[index] % sys; base[index] = remainder; if (remainder == 0){ index--; } } }while (remainder == 0); } public static boolean kBaseSystem(int base[]){ //如果规定k-进制的数只有一位数,那么返回true if (base.length > 1 && base[0] == 0) return false; int count = 0; for (int i = 0; i < base.length; i++) { if (base[i] == 0){ count++; if (count > 1) return false; }else { count = 0; } } return true; } }
0.0分
4 人评分
C语言程序设计教程(第三版)课后习题3.7 (C语言代码)浏览:746 |
C语言程序设计教程(第三版)课后习题8.8 (C语言代码)浏览:627 |
C语言程序设计教程(第三版)课后习题5.6 (C语言代码)浏览:909 |
C语言程序设计教程(第三版)课后习题5.7 (C语言代码)浏览:723 |
C语言程序设计教程(第三版)课后习题1.5 (C语言代码)浏览:368 |
三角形 (C语言代码)浏览:965 |
Hello, world! (C++代码)浏览:1778 |
幸运数 (C++代码)浏览:1309 |
【亲和数】 (C语言代码)浏览:628 |
C语言程序设计教程(第三版)课后习题7.4 (C语言代码)浏览:548 |