题目:求0到7所组成奇数的个数
解题思路:从题目中可以看出这是一个数字排列组合问题,0到7总共是8个数,所以可以排到八位数。题目中所求的是奇数,我们都知道一个数的最后一位数是奇数的时候,不管前面有多少位数,这个数就一定是奇数。由于所求奇数总数较大,我们可以将其分成以下几个部分进行计算:
- 当只有一位数的时候所能组成的奇数个数为4,即1、3、5、7。
- 当只有两位数的时候所能组成的奇数个数为7 * 4 = 28。(0不能作为首位数字,所以只有7个数)
- 当只有三位数的时候所能组成的奇数个数为7 * 8 * 4 = 224。(0不能放在首位,但可以放在中间)
- 当只有四位数的时候所能组成的奇数个数为7 * 8 * 8 * 4 = 1792。
- 当只有五位数的时候所能组成的奇数个数为7 * 8 * 8 * 8 * 4 = 14336。
- 以此类推。。。。
- 当只有八位数的时候所能组成的奇数个数为7 * 8 * 8 * 8 * 8 * 8 * 8 * 4 = 7340032。
注:7是首位不能为0,4是保证最后一位数是奇数,也就是1、3、5、7。
代码如下:
package com.practice;
/*
题目:求0-7所组成的奇数个数
思路:
1.只有一位数时的奇数个数:4(c8{4})
2.只有两位数时的奇数个数:7*4(c8{7}*c8{4})(0不能放在首位)(括号里面是排列组合,可以忽略不看)
3.只有三位数时的奇数个数:7*8*4(c8{7}*c8{8}*c8{4})(括号里面是排列组合,可以忽略不看)
4.只有四位数时的奇数个数:7*8*8*4(c8{7}*c8{8}*c8{8}*c8{4})(括号里面是排列组合,可以忽略不看)
5.只有五位数时的奇数个数:7*8*8*8*4(c8{7}*c8{8}*c8{8}*c8{8}*c8{4})(括号里面是排列组合,可以忽略不看)
以此类推。。。。
8.只有八位数时的奇数个数:7*8*8*8*8*8*8*4(c8{7}*c8{8}*c8{8}*c8{8}*c8{8}*c8{8}*c8{8}*c8{4})
(括号里面是排列组合,可以忽略不看)
9.所有的奇数个数有一到八位奇数总数相加
*/
public class OddNumberCount {
public static void main(String[] args) {
int sum = 0;
int oddNumberCount = 0;
// System.out.println("只有1位数时的奇数个数:" + oddNumberCount);
for (int i = 1; i <= 8; i++) {
// 一位数时的奇数个数
if (i == 1) oddNumberCount += 4;
// 两位数时的奇数个数
if (i == 2) oddNumberCount *= 7;
// 三位数以上时的奇数个数
if (i >= 3) oddNumberCount *= 8;
sum += oddNumberCount;
System.out.println("只有" + i + "位数时的奇数个数:" + oddNumberCount);
}
System.out.println("0-7所组成的奇数个数是:" + sum);
}
}