作者:佚名 时间:2024-01-12 09:21:42 阅读:(6)
最近在看Java的经典实例,接下来云梦编程就为大家分享一下使用排列组合的思想来解决java求0—7所能组成的奇数个数的方法,有需要的小伙伴可以参考一下:
在0-7中组成的数0不能开头所以数为一位数时奇数有1,3,5,7 所以组成规律如下: // 组成1位数是4个。 // 组成2位数是7*4个。 // 组成3位数是7*8*4个。 // 组成4位数是7*8*8*4个。 // ......
public static void main(String[] args) { int sum = 4; System.out.println("组成1位数是 " + sum + " 个"); sum = sum * 7; System.out.println("组成2位数是 " + sum + " 个"); for (int j = 3; j <= 9; j++) { sum = sum * 8; System.out.println("组成" + j + "位数是 " + sum + " 个"); } }
这道题可以使用排列组合的思想来解决。一个数是奇数,当且仅当它的个位是 1、3、5 或 7。而其他位可以是 0、1、2、3、4、5、6、7 中的任意一个数字。因此,考虑从个位开始,一位一位地向高位逐步确定数字,最终计算出满足条件的数的个数。
public class Main { public static void main(String[] args) { int n = 8; // 数字的总个数 int count = countOddNumbers(n); System.out.println("0-7所能组成的奇数个数为:" + count); } // 计算由 0-7 中的数字组成的奇数个数 public static int countOddNumbers(int n) { int count = 0; for (int i = 1; i <= n; i++) { count += countOddNumbersHelper(i, 0); } return count; } // 递归函数,计算以 digit 为位数、lastDigit 为最高位数字的奇数个数 public static int countOddNumbersHelper(int digit, int lastDigit) { if (digit == 1) { if (lastDigit == 1 || lastDigit == 3 || lastDigit == 5 || lastDigit == 7) { return 1; } else { return 0; } } int count = 0; for (int i = 0; i <= 7; i++) { if (lastDigit != 0 || i != 0) { // 如果最高位是 0,则不能选取 if (i == 1 || i == 3 || i == 5 || i == 7) { count += countOddNumbersHelper(digit - 1, i); } else { count += countEvenNumbersHelper(digit - 1, i); } } } return count; } // 递归函数,计算以 digit 为位数、lastDigit 为最高位数字的偶数个数 public static int countEvenNumbersHelper(int digit, int lastDigit) { if (digit == 1) { if (lastDigit == 0 || lastDigit == 2 || lastDigit == 4 || lastDigit == 6) { return 1; } else { return 0; } } int count = 0; for (int i = 0; i <= 7; i++) { if (lastDigit != 0 || i != 0) { // 如果最高位是 0,则不能选取 if (i == 1 || i == 3 || i == 5 || i == 7) { count += countEvenNumbersHelper(digit - 1, i); } else { count += countOddNumbersHelper(digit - 1, i); } } } return count; } }
这个程序会输出由0-7中的数字组成的奇数个数。在计算过程中,我们使用了两个递归函数countOddNumbersHelper和countEvenNumbersHelper,分别用于计算以某个数字为最高位的奇数和偶数个数。这些函数通过递归调用,依次计算出每一位可以选择的数字,最终得出满足条件的数字个数。
以上就是云梦编程为大家介绍的java求0—7所能组成的奇数个数的两种程序编写方法,了解更多相关文章请关注云梦编程网!