【问题标题】:Java - numbers with at least one 7 and one 9 in its digitJava - 数字中至少有一个 7 和一个 9 的数字
【发布时间】:2016-12-13 01:51:08
【问题描述】:

我必须编写一个程序,通过检查从 1 到 999,999 的每个数字中的数字(“蛮力”方法),确定有多少 1,000,000 以下的正整数在其数字中至少有一个 7 和至少一个 9。答案应该是 199,262。请帮忙!

【问题讨论】:

  • 你试过什么?具体问题是什么?将问题分成几部分(即方法): 1. 遍历数字,如果数字符合要求,则增加一个计数器。 2. 通过将数字拆分为数字来检查数字是否符合要求。 3.检查一个数字是7还是9。
  • 我从整数中提取了数字。我的问题是......例如,如果数字是 77,由于我单独提取了数字,所以它计为 2。因此,我最终得到了一个大于 199,262 的数字。
  • 发布您尝试过的内容,并在问题中解释您遇到的具体问题,而不是在 cmets 中。
  • @irispapyrus_ 您的代码是否必须检查单个数字,还是可以依靠标准库方法来完成?
  • 提示:在某些时候你需要类似if (numberContains(number, 7) && numberContains(number, 9)) { count++; }

标签: java algorithm


【解决方案1】:

如果数字包含7 9

,如何将数字转换为字符串和文本
    int count = 0;
    for (int i = 1; i < 1000000; i++) {

        String text = String.valueOf(i);
        // contains both
        if (text.contains("7") && text.contains("9")) count++;
    }
    System.out.println(count);

【讨论】:

  • among its digits by examining the digits in each number - 您正在检查每个连接字符串中的字符。
  • @xenteros 我要求在顶级 cmets 中确认这一点 - 没有回复,所以我假设使用标准的 java 类方法来做到这一点是可以的 ;-)
【解决方案2】:

为您准备的一些组合:

不带 7(或不带 9)的两位数的个数:

8*(9^1) = 72

不带 9 或 7 的 2 位数字的个数:

7*(8^1) = 56

两位数的个数:

9*(10^1) = 90

至少有一个 7 和一个 9 的 2 位数字的个数:

90 - 2*72 + 56 = 2

n位计算公式:

= 9*(10^(d-1)) - 2*8*(9^(d-1)) + 7*(8^(d-1))


  9*(10^1+10^2+10^3+10^4+10^5) 

- 2*8*(9^1+9^2+9^3+9^4+9^5)

+ 7*(8^1+8^2+8^3+8^4+8^5) 

= 199262

【讨论】:

    【解决方案3】:

    蛮力算法:

    public int count() {
        int count = 0;
        boolean per7 = false;
        boolean per9 = false;
        for (int i = 0; i < 1000000; i++) {
            int j = i;
            while ((!(per7 && per9)) && j > 1) {
                if (j%10 == 7) {
                    per7 = true;
                } if (j%10 == 9) {
                    per9 = true;
                }
                j = j/10;
            }
            if (per7 && per9) {
                count++;
            }
            per7 = false;
            per9 = false;
        }
        return count;
    }
    

    另一方面,我建议使用有关组合学的基本知识,但我知道在学习期间,我们经常做一些愚蠢的任务来学习某些技能。

    【讨论】:

    • 不仅你给出了一个解决方案而不解释它,甚至更好,没有帮助OP自己找到它,但是这个解决方案是错误的。
    • @JBNizet 标题中的问题与正文中的不同
    猜你喜欢
    • 1970-01-01
    • 2013-05-27
    • 2015-05-24
    • 1970-01-01
    • 1970-01-01
    • 2021-01-26
    • 1970-01-01
    • 1970-01-01
    • 2019-02-12
    相关资源
    最近更新 更多