java - 如何在正整数序列中每第 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, ...
我在这里做错了什么?
解决方案
这给出了预期的输出:
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),如果是,则在打印您的号码后在您的模式中打印一个星号。毕竟,数字总是被打印出来的。
推荐阅读
- javascript - Rails - 为特定用例定制 Flash 消息
- java - quarkus: IllegalStateException: 您试图在 IO 线程上执行阻塞操作。这是不允许的,因为阻塞了 IO 线程
- c# - 从有状态的 Service Fabric 应用程序启动 MVC Web Api
- objective-c - Change AVPlayer Video MacOS Objective-C Cocoa
- php - 从“空购物车”页面删除或隐藏 WooCommerce“返回商店”按钮?
- java - Java 日历不支持 2 月 29 日
- python-3.x - Pandas groupby 获取大于 0 的值的计数
- https - HTTPS 中的 AWS Amplify 模拟
- heroku - 如何将 sendgrid 帐户更改为另一个帐户?
- windows - 无法从 QGeoCoordinate 中删除特殊字符