首页 > 解决方案 > 如何在正整数序列中每第 5 个和后面的第 3 个数字之后打印一个额外的 *?

问题描述

我正在尝试打印

1, 2, 3, 4, 5, *, 6, 7, 8, *, 9, 10, 11, 12, 13, *, 14, 15, 16, *, 17, ...

其中*应在每 5 次之后和第三个整数之后重复打印一个附加信息。

这是我当前的代码

for (int i = 1; i <= 100; i++) {
    if (i % 5 == 0) {
        System.out.print("* ");
    } else {
        System.out.print(i + " ");
    }
}

哪个打印

1, 2, 3, 4, *, 6, 7, 8, 9, *, 11, 12, 13, 14, *, 16, 17, ...

我在这里做错了什么?

标签: java

解决方案


这给出了预期的输出:

class Main {
  public static void main(String[] args) {
    for (int i = 1; i <= 100; i++) {
        System.out.print(i + " ");
        if ((i-5) % 8 == 0 || i % 8 == 0) {
            System.out.print("* ");
        }
    }
  }
}

// Output: 
// 1 2 3 4 5 * 6 7 8 * 9 10 11 12 13 * 14 15 16 * 17 18 19 20 21 * 22
// 23 24 * 25 26 27 28 29 * 30 31 32 * 33 34 35 36 37 * 38 39 40 * 41
// 42 43 44 45 * 46 47 48 * 49 50 51 52 53 * 54 55 56 * 57 58 59 60 61
// * 62 63 64 * 65 66 67 68 69 * 70 71 72 * 73 74 75 76 77 * 78 79 80
// * 81 82 83 84 85 * 86 87 88 * 89 90 91 92 93 * 94 95 96 * 97 98 99 100

试运行链接:https ://repl.it/repls/MarriedPreemptiveLeadership

另外,感谢@Rogue 提出了数学公式。

这是@Rogue提供的解释

您有 5、8、13、16、21 等。因此,这些索引位于 5 或​​ 5+3 (8) 或 5+(8n) 的间隙之后。因此,您可以从那里检查是否 ((i-5) % 8 == 0 || i % 8 == 0),如果是,则在打印您的号码后在您的模式中打印一个星号。毕竟,数字总是被打印出来的。


推荐阅读