zoukankan      html  css  js  c++  java
  • 9.1练习题2 硬币翻转 题解

    题目出处:洛谷 P2708

    题目描述

    从前有很多个硬币摆在一行,有正面朝上的,也有背面朝上的。正面朝上的用1表示,背面朝上的用0表示。现在要求从这行的第一个硬币开始,将前若干个硬币一起翻面,问如果要将所有硬币翻到正面朝上,最少要进行这样的操作多少次?

    输入格式

    一个字符串,由0和1组成,表示硬币状态。

    输出格式

    一个数,表示要翻转的最少次数。

    样例输入

    10
    

    样例输出

    2
    

    题目分析

    我们假设连续的一串 '0' 或者连续的一串 '1' 是一段,我们只需要找到有多少段就可以了。
    那么假设现在有 (cnt) 段,这个时候我们需要去判断最后一段是由 '0' 组成的还是由 '1' 组成的。
    如果最后一段是由 '1' 组成的,那么答案就是 (cnt-1) ; 如果最后一段是由 '0' 组成的,那么答案是 (cnt)
    为什么呢?

    • 想象一下都是 '1' 的一个字符串,此时 (cnt=0) ,我们不需要翻转,所以答案就是 (0)
    • 想象一下都是 '0' 的一个字符串,此时 (cnt=0) ,但是我们也需要翻转一次才能让它全部为正,所以答案就是 (1)

    实现代码如下:

    #include <bits/stdc++.h>
    using namespace std;
    const int maxn = 10010;
    int n, cnt;
    char ch[maxn];
    int main() {
        cin >> ch;
        n = strlen(ch);
        for (int i = 1; i < n; i ++) if (ch[i] != ch[i-1]) cnt ++;
        if (ch[n-1] == '0') cnt ++;
        cout << cnt << endl;
        return 0;
    }
    
  • 相关阅读:
    SQL一条语句统计记录总数及各状态数
    火狐登录国际账户
    HTML基础笔记
    增强for、lambda for、stream 遍历List 结束方法 or 跳过循环本次循环
    nginx
    前端问题总结
    Node.js
    Actuator
    ssh免密登录实现及Python实现
    【Mac渗透测试】之SQL注入Demo
  • 原文地址:https://www.cnblogs.com/zifeiynoip/p/11482986.html
Copyright © 2011-2022 走看看