统计三位字符串中字符 1 的个数,作为需要放置弹珠的格子数。
OJ: atcoder
题目 ID: abc081_a
难度:入门
标签:字符串haskell
日期: 2026-07-09 20:33
题意
输入一个长度为 3 的字符串,每个字符为 0 或 1。
统计其中 1 的个数并输出。
例如 101 中有 2 个 1,输出 2。
思路
本题不涉及算法优化,重点是练习 Haskell 的基础 IO 和字符串操作。
核心流程:
- 用
getLine读入一行字符串 - 用
filter (== '1')过滤出所有'1'字符 - 用
length统计个数 - 用
print输出结果
代码
haskell
{-
Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
rainboy的学习导航网站: https://idx.roj.ac.cn
create_at: 2026-07-09 20:47
update_at: 2026-07-09 20:47
-}
main :: IO ()
main = do
s <- getLine
let cnt = length (filter (== '1') s)
print cnt另一种写法,使用 dropWhile 去掉前导 0 后计数:
haskell
{-
Author by Rainboy blog: https://rainboylv.com github: https://github.com/rainboylvx
rbook: -> https://rbook.roj.ac.cn https://rbook2.roj.ac.cn
rainboy的学习导航网站: https://idx.roj.ac.cn
create_at: 2026-07-09 20:47
update_at: 2026-07-09 20:47
-}
main :: IO ()
main = do
s <- getLine
let cnt = length . dropWhile (== '0') $ s
print cnt复杂度
时间复杂度
总结
Haskell 中处理简单输入输出和字符串过滤的基本模式:
getLine 读入,filter 筛选,length 计数,print 输出。