如何用循环和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-99,符合要求的数字数量仅63个,远不足100个
- 判断数字是否含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
相关产品推荐
相关产品推荐

