仅用4个int变量统计与输入N大小关系的实现疑问
问题解答:用4个int变量统计大于/小于N的数的数量
核心结论
完全可以在4个int变量的限制下完成需求,关键是明确变量职责,并在循环中跳过等于N的数(不纳入任何统计)。
问题修正思路
原代码的错误在于:
- 未处理等于N的数,错误地用
N - 大于数的数量当作小于数的数量,忽略了等于N的数会占用总数名额。 - 变量使用逻辑混乱,未明确每个变量的核心作用。
符合限制的Kotlin代码
我们将4个int变量分配为:
n:存储初始输入的N(固定不变,用于比较)counter:循环计数器,记录已输入的数的个数(从0到n-1)countGreater:统计大于N的数的数量countLess:统计小于N的数的数量
基础版本(适合小学生理解)
val sc = Scanner(System.`in`) println("N: ") val n = sc.nextInt() var countGreater = 0 var countLess = 0 var counter = 0 while (counter < n) { println("---> ") val num = sc.nextInt() if (num > n) { countGreater++ } else if (num < n) { countLess++ } // 等于N的情况不做任何统计 counter++ } println("大于N的数的数量: $countGreater") println("小于N的数的数量: $countLess")
严格仅4个全局int变量版本(复用变量存储输入值)
如果要求全局仅声明4个int变量,我们可以复用countGreater临时存储输入值,避免额外变量:
val sc = Scanner(System.`in`) println("N: ") val n = sc.nextInt() var countGreater = 0 var countLess = 0 var counter = 0 while (counter < n) { println("---> ") // 保存当前统计值 val temp = countGreater // 复用countGreater存储输入值 countGreater = sc.nextInt() if (countGreater > n) { countGreater = temp + 1 } else if (countGreater < n) { countGreater = temp countLess++ } else { countGreater = temp } counter++ } println("大于N的数的数量: $countGreater") println("小于N的数的数量: $countLess")
对应伪代码
1. 读取整数N,存入变量n 2. 初始化countGreater为0,countLess为0,counter为0 3. 若counter < n则执行步骤4,否则跳转至步骤10 4. 提示输入下一个整数,读取并处理: a. 保存countGreater的当前统计值 b. 用countGreater存储输入值 c. 若输入值 > n:恢复统计值并加1 d. 若输入值 < n:恢复统计值,countLess加1 e. 若输入值 == n:仅恢复统计值 5. counter加1 6. 跳转至步骤3 7. 输出"大于N的数的数量: " + countGreater 8. 输出"小于N的数的数量: " + countLess
内容的提问来源于stack exchange,提问作者radzmiv
相关产品推荐
相关产品推荐

