列表

详情


NC230834. 翻硬币

描述

小龙很喜欢玩翻转硬币,今天他在桌面上摆了一排正面朝上的硬币,每次操作可以把连着一段硬币变成全部正面朝上或者全部背面朝上,小龙想知道如果要将这些硬币通过这个操作翻转成一个目标状态,最少要翻转多少次。这个问题对于小龙这个懒狗来说太麻烦了,想让你设计一个程序帮助他得到答案

输入描述

输入有两行,第一行包含一个整数 ,表示桌面上硬币个数。
第二行一个字符串表示我们想要的硬币状态朝上的情况,1代表正面朝上,0代表背面朝上。

输出描述

输出一个整数,表示最少操作次数。

示例1

输入:

3
101

输出:

1

示例2

输入:

3
010

输出:

2

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

pypy3 解法, 执行用时: 90ms, 内存消耗: 52252K, 提交时间: 2022-10-19 20:21:15

n = int(input())
s = input()
ans = 0
if int(s[0]) == 0:
    ans = 1
for i in range(1,len(s)):
    if s[i] == s[i-1]:
        continue
    if int(s[i]) == 0:
        ans += 1
print(ans)

C 解法, 执行用时: 24ms, 内存消耗: 336K, 提交时间: 2021-11-21 15:43:50

#include<stdio.h>
int main()
{
	long n,m=0,i,x1=1,x2;
	scanf("%ld",&n);
	for(i=0;i<n;i++)
	{
		scanf("%1ld",&x2);
		if(x1&&x2==0)
			m++;
		x1=x2;
	}
	printf("%ld",m);
}

Python3 解法, 执行用时: 144ms, 内存消耗: 5040K, 提交时间: 2022-11-08 19:36:15

n = int(input())
s1 = input()
s2 = ''
s2 += s1[0]
k = 1
while k < n:
    if s1[k] != s1[k-1]:
        s2 += s1[k]
    k += 1
a = s2.count('0')
print(a)
    
    

C++ 解法, 执行用时: 24ms, 内存消耗: 416K, 提交时间: 2021-11-29 20:54:49

#include<iostream>
using namespace std;
long n,m=0,a=1,b;
int main() {
	for(cin>>n; n--;) {
		scanf("%1ld",&b);
		if(a&b==0) m++;
		a=b;
	}
	cout<<m;
}

上一题