使用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
相关产品推荐
相关产品推荐

