You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用循环和if语句生成100个不含数字3和5的公寓编号?

公寓编号生成问题解决

任务需求

  • 为一栋楼的100套公寓生成编号,编号中不能包含数字3和5(例如13、15、23、25这类均不符合要求),因此会出现101、104这类超过100的编号
  • 要求仅使用for或while循环和if语句实现

现有代码问题分析

原代码仅遍历1到99的数字,自然无法凑够100个符合要求的编号,同时判断逻辑重复冗余:

int counter = 0;
for (int i = 1; i < 100; i++) {
    if (i / 10 == 3 || i % 10 == 3 || i / 10 == 5 || i % 10 == 5) {
        continue;
    }
    System.out.print(i + " ");
    counter++;
}
System.out.println(counter);

具体问题:

  1. 循环范围限制在1-99,符合要求的数字数量仅63个,远不足100个
  2. 判断数字是否含3或5的逻辑重复,仅适配两位数,无法处理三位数及以上的编号

改进后的实现代码

我们需要扩大遍历范围,直到收集到100个有效编号,同时优化判断逻辑以适配任意位数:

while循环实现

int counter = 0;
int num = 1;
while (counter < 100) {
    boolean isValid = true;
    int temp = num;
    // 检查当前数字的每一位
    while (temp > 0) {
        int digit = temp % 10;
        if (digit == 3 || digit == 5) {
            isValid = false;
            break;
        }
        temp = temp / 10;
    }
    if (isValid) {
        System.out.print(num + " ");
        counter++;
    }
    num++;
}
System.out.println("\n总有效编号数:" + counter);

for循环实现

int counter = 0;
for (int num = 1; counter < 100; num++) {
    boolean isValid = true;
    int temp = num;
    // 逐位检查是否含3或5
    while (temp > 0) {
        int digit = temp % 10;
        if (digit == 3 || digit == 5) {
            isValid = false;
            break;
        }
        temp /= 10;
    }
    if (isValid) {
        System.out.print(num + " ");
        counter++;
    }
}
System.out.println("\n总有效编号数:" + counter);

代码说明

  • 循环不再限制范围,直到收集满100个有效编号为止,自然会生成101、104这类三位数编号
  • 通过内层循环逐位检查数字,逻辑通用,能适配任意位数的数字,避免了原代码的重复判断
  • 用isValid变量标记当前编号是否合规,逻辑清晰易读

内容的提问来源于stack exchange,提问作者Kira

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 23:30:18