系列:1到1000中包含8的个数

来源:互联网 发布:图书数据加工公司招聘 编辑:程序博客网 时间:2024/05/10 18:52

排列组合问题

分析:
不包含8的数的每一位都不是8,1到999是三位数,每位都不是8,只能由0到7和9构成,所以不包含8的数字的个数为9^3个。那么包含8的数字的个数为1000-9^3 = 271
编程验证:

    int x = 0;    for (int i = 1; i <= 1000; i++) {        if (String.valueOf(i).contains("8")) {            x++;        }    }    System.out.println(x);

这里写图片描述

上面是从对立面分析的。我们从正面分析,把包含8的数字分为3类,包含一个8,包含2个8和包含3个8.
包含一个8的:首先从3位中挑出一位用于放8,其他两位不能是8,其余两位有9中情况。所以一共是这里写图片描述种情况
包含2个8的:首先从3位中挑出两位包含8,剩下的一位不包含8,共这里写图片描述种情况
包含3个8的只有一种情况。所以一共这里写图片描述+这里写图片描述+1 = 271

举一反三:
1到1000中包含6或8的数字

对立面分析:即不包含6也不包含8的情况一共8^3种,所以包含6或者8的情况有1000-8^3=488

正面分析:
有一位包含6或8:这里写图片描述,从3位中挑出一位放6或8,剩下两位都不能用6或8,乘以2是因为放6或者放8.
有两位包含6或8:这里写图片描述
有三为包含6或8:2^3
所以一共这里写图片描述+这里写图片描述+2^3 = 488

编程验证:

    int x = 0;    for (int i = 1; i <= 1000; i++) {        if (String.valueOf(i).contains("8") || String.valueOf(i).contains("6")) {                x++;        }    }    System.out.println(x);

这里写图片描述

上面的8和8或6可以推广到其他任意数字。

继续举一反三:

1到10000中包含6或8但不包含4的数字的个数

这个感觉从对立面不好分析,那我们直接正面分析
包含一个6或8:这里写图片描述
包含两个6或8:这里写图片描述
包含三个6或8:这里写图片描述
包含四个6或8: 2^4
所以一共4160种情况

编程验证:

    int count = 0;    for (int i = 1; i <= 10000; i++) {        if (!String.valueOf(i).contains("4") && (String.valueOf(i).contains("8") || String.valueOf(i).contains("6"))) {            count++;        }    }    System.out.println(count);

这里写图片描述

0 0
原创粉丝点击