如何正确实现符合BishBashBosh规则的程序输出?
BishBashBosh 程序实现修正方案
规则回顾
- 被3整除的数字输出
Bish - 被5整除的数字输出
Bash - 同时被3和5整除的数字输出
BishBash - 无论是否满足上述整除规则,只要各位数字之和为奇数,就追加输出
Bosh(例如30:3+0=3为奇数,最终输出BishBashBosh) - 不满足任何整除规则且数位和为偶数时,输出数字本身
原代码问题分析
第一段代码问题
- 数位和计算错误:循环中
temp != 10是无效判断,未更新temp的值,应改为temp /= 10来逐位拆解数字 - 逻辑顺序错误:将数位和判断放在
else if分支,导致满足整除规则的数字无法触发Bosh追加逻辑 - 计数器逻辑错误:在同时被3和5整除的分支中错误累加
BOSH计数器,该计数器应仅在数位和为奇数时触发
第二段代码问题
- 变量未同步更新:循环始终使用初始值
n=30,未将循环变量i赋值给n,导致所有循环都在处理同一个数字 - 输出与拼接逻辑混乱:
output字符串未在每次循环后重置,导致内容持续累加重复;且在拼接Bish后直接输出,破坏了结果的完整性 - 数位和计算后变量损坏:计算数位和时修改了
n的值,后续循环无法获取正确的目标数字
正确实现代码
// 初始化各类输出的计数器 int countBish = 0; int countBash = 0; int countBishBash = 0; int countBosh = 0; int countNumber = 0; // 示例:遍历1到30的数字,可自行调整范围 for (int i = 1; i <= 30; i++) { string result = ""; bool hasDivisibleFlag = false; // 处理3的整除规则 if (i % 3 == 0) { result += "Bish"; hasDivisibleFlag = true; // 仅当不同时被5整除时,统计Bish单独出现的次数 if (i % 5 != 0) countBish++; } // 处理5的整除规则 if (i % 5 == 0) { result += "Bash"; hasDivisibleFlag = true; // 仅当不同时被3整除时,统计Bash单独出现的次数 if (i % 3 != 0) countBash++; } // 统计同时被3和5整除的次数 if (i % 3 == 0 && i % 5 == 0) countBishBash++; // 计算当前数字的各位之和 int sumOfDigits = 0; int temp = i; while (temp > 0) { sumOfDigits += temp % 10; temp /= 10; } // 判断是否需要追加Bosh if (sumOfDigits % 2 == 1) { result += "Bosh"; countBosh++; } // 输出最终结果:无整除输出且无Bosh时,输出数字本身 if (string.IsNullOrEmpty(result)) { Console.WriteLine(i); countNumber++; } else { Console.WriteLine(result); } } // 输出最终统计数据 Console.WriteLine($"\n统计结果:Bish={countBish}, Bash={countBash}, BishBash={countBishBash}, Bosh={countBosh}, 数字输出={countNumber}");
关键优化点
- 将整除规则改为独立
if判断,确保同时满足3和5整除时能正确拼接BishBash - 数位和判断独立于整除逻辑,保证只要符合条件就追加
Bosh - 每次循环重置
result字符串,避免内容累加重复 - 拆分计数器逻辑,精准统计每种输出的出现次数
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

