云梦编程网

当前位置:首页 > JAVA教程 >

java求0—7所能组成的奇数个数

作者:佚名 时间:2024-01-12 09:21:42 阅读:(3)

最近在看Java的经典实例,接下来云梦编程就为大家分享一下使用排列组合的思想来解决java求0—7所能组成的奇数个数的方法,有需要的小伙伴可以参考一下:

1、解法一:

(1)、题目分析:

在0-7中组成的数0不能开头所以数为一位数时奇数有1,3,5,7
所以组成规律如下:
// 组成1位数是4个。
// 组成2位数是7*4个。
// 组成3位数是7*8*4个。
// 组成4位数是7*8*8*4个。
// ......

(2)、程序代码:

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 + " 个");
	}
}

2、解法二:

(1)、题目分析:

这道题可以使用排列组合的思想来解决。一个数是奇数,当且仅当它的个位是 1、3、5 或 7。而其他位可以是 0、1、2、3、4、5、6、7 中的任意一个数字。因此,考虑从个位开始,一位一位地向高位逐步确定数字,最终计算出满足条件的数的个数。

(2)、程序代码:

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所能组成的奇数个数的两种程序编写方法,了解更多相关文章请关注云梦编程网!

最新文章

热门文章