首页 > 试题广场 >

反转硬币

[编程题]反转硬币
  • 热度指数:471 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
在桌子上有 n 个硬币排成一排,从左到右依次是第一个,第二个,第三个......
硬币有正反两面,正面朝上用 0 表示,反面朝上用 1 表示。初始的时候桌子上的硬币正面反面都有,这样看起来就有点杂乱了。
牛牛决定整理一下这些硬币,让它们都正面朝上,会有一种规则的美感。
整理的规则是:假如现在有 k 个反面朝上的硬币,那么就将位置 k 处的硬币反转过来。
牛牛一直重复上面这个步骤,例如对于 3 个硬币的情况:
开始共有 2 个反面朝上的,所以反转第 2 个硬币,现在变成了
现在共有 3 个反面朝上的,所以反转第 3 个硬币,现在变成了
现在共有 2 个反面朝上的,所以反转第 2 个硬币,现在变成了
现在共有 1 个反面朝上的,所以反转第 1 个硬币,现在变成了
经过这四次操作之后,硬币终于如愿的全部正面朝上了。
现在给出硬币的序列,请你告诉牛牛共需要几次操作才能将所有的硬币都变得正面朝上,如果按这种方式永远也不可能变成全部正面朝上的话也要告诉牛牛哦。

输入描述:
第一行输入一个正整数 n,代表硬币的个数
接下来一行一个长度为 n 串,代表硬币的序列
1 \leq n \leq 10^5




输出描述:

如果可以在有限次内将硬币全部反转成正面朝上,输出这个次数
否则在一行中输出


示例1

输入

3
101

输出

4
这题不会有死循环,纯误导了
发表于 2025-05-21 19:59:16 回复(0)