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

仅用4个int变量统计与输入N大小关系的实现疑问

问题解答:用4个int变量统计大于/小于N的数的数量

核心结论

完全可以在4个int变量的限制下完成需求,关键是明确变量职责,并在循环中跳过等于N的数(不纳入任何统计)。

问题修正思路

原代码的错误在于:

  1. 未处理等于N的数,错误地用N - 大于数的数量当作小于数的数量,忽略了等于N的数会占用总数名额。
  2. 变量使用逻辑混乱,未明确每个变量的核心作用。

符合限制的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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 00:43:11