0-1000 的数字里,恰好只有一个5的数的个数

0-1000 的数字里,恰好只有一个5的数的个数

2024.11.10架构考试选择题。写在前面,我觉得今年的选择题出的特别好,更多考察考生的逻辑思维能力和数学能力,专业的说就是考算法。以往都是以程序实现思维的互联网工作者,首次以心算手算的方式计算,的确是一个好的开始,重视人的思维了。

题目

0-1000 的数字里,恰好只有一个5的数的个数 A、242 B、243 C、225 D、224 如果这种题目是选择题,有什么快捷的思路获得结果吗

0-1000 的数字里,恰好只有一个5的数的个数

A、242

B、243

C、225

D、224

程序员思维 使用代码实现:

我们先使用编辑器插件提示生成代码示例如下:

/**
 * @author zhizhou   2024/11/11 09:09
 */
public class countNumberWithOneFive {
    
    //写一段代码 求1-1000之间的数字中 只含有一个5的数字有哪些 有多少个 
    public static void main(String[] args) {
        int count = 0;
        for (int i = 1; i <= 1000; i++) {
            String str = String.valueOf(i);
            if (str.contains("5") && str.indexOf("5") == str.lastIndexOf("5")) {
                count++;
                System.out.println(i);
            }
        }
        System.out.println("共有" + count + "个数字");
    }
}

代码实现问问gpt:

chatgpt给出的思路也是字符串比较,最终和上述代码结果一致。

可以用以下 Java 代码来找到 1 到 1000 之间只含有一个数字 5 的数字,并统计其数量:
使用循环遍历 1 到 1000 之间的所有数字,将每个数字转换成字符串形式,使用 chars().filter() 来统计字符 ‘5’ 的个数。

public class SingleFiveCounter {
    public static void main(String[] args) {
        int count = 0;

        System.out.println("Numbers with only one '5' between 1 and 1000:");
        for (int i = 1; i <= 1000; i++) {
            String number = Integer.toString(i);
            if (number.chars().filter(ch -> ch == '5').count() == 1) {
                System.out.println(i);
                count++;
            }
        }

        System.out.println("Total count: " + count);
    }
}

但是呢,考试是选择题,没有机会去写代码的,所以搞清楚出题思路才是关键。

实际考试当中是不会有机会写代码实现的,那如何实现心算和手算呢?思路如下,对于这种题目,分析数字出现的规律,可以简化计算。

解题思路

  1. 分情况统计:考察1-1000的数位,把包含一个“5”的情况按每个位数来分析。

    • 从 0 到 999 中,百位、十位和个位各有一位可能出现“5”。
  2. 单个位上出现“5”

    • 百位、十位和个位上恰好出现一个“5”的数字数量,且其他位不含“5”:
      • 百位上是“5”,十位和个位可以是 0-9(但不能是 5),共有 (9 \times 9 = 81) 个。
      • 十位上是“5”,百位和个位可以是 0-9(但不能是 5),共有 (9 \times 9 = 81) 个。
      • 个位上是“5”,百位和十位可以是 0-9(但不能是 5),共有 (9 \times 9 = 81) 个。
  3. 总和:将上述情况相加得到:
    [
    81 + 81 + 81 = 243
    ]

所以,答案是 B、243
在这里插入图片描述

总结

这种题目的快捷思路就是:

  • 先明确每个位数单独为“5”时的情况。
  • 按位组合,计算不同位置上包含一个“5”的组合数,再汇总。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值