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

使用R解决HackerRank挑战时的输出格式对齐问题

问题:R语言HackerRank挑战输出格式不符问题

我用R语言解决HackerRank的挑战时,计算结果和参考输出一致,但输出格式存在差异:我的代码会输出带[1]前缀和引号的字符串,而参考输出是无前缀的纯数值格式。

原代码如下:

plusMinus <- function(arr) {
  pos <- neg <- zero <- 0
  for (i in 1:length(arr)) {
    if (arr[i] == 0) {
      zero <- zero + 1
    }
    else if (arr[i] > 0) {
      pos <- pos + 1
    } else {
      neg <- neg + 1
    }
  }
  print(format(pos/length(arr), digits=6, nsmall=6))
  print(format(neg/length(arr), digits=6, nsmall=6))
  print(format(zero/length(arr), digits=6, nsmall=6))
}

输出对比

我的输出:

> plusMinus(arr)
[1] "0.500000"
[1] "0.333333"
[1] "0.166667"

参考输出:

> plusMinus(arr)
0.500000
0.333333
0.166667

解决方法

问题根源是print()函数会默认输出R的向量格式(带索引前缀和字符串引号),改用cat()函数替代即可输出纯文本格式,同时保留指定的小数位数。

修改后的代码:

plusMinus <- function(arr) {
  pos <- neg <- zero <- 0
  len <- length(arr)
  for (i in 1:len) {
    if (arr[i] == 0) {
      zero <- zero + 1
    } else if (arr[i] > 0) {
      pos <- pos + 1
    } else {
      neg <- neg + 1
    }
  }
  # 用cat输出,每个结果后加换行符实现逐行输出
  cat(format(pos/len, digits=6, nsmall=6), "\n")
  cat(format(neg/len, digits=6, nsmall=6), "\n")
  cat(format(zero/len, digits=6, nsmall=6), "\n")
}

补充说明:

  • cat()函数用于直接输出纯文本,不会添加R默认的向量索引前缀和引号
  • 每个输出后添加"\n"来实现换行,和参考输出的每行一个结果对齐
  • 提前计算len <- length(arr)可避免重复计算,是可选的效率优化

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 13:25:23