• 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;
    }
    
  • 相关阅读:
    浏览器嗅探
    (转)javascript中为何在匿名function函数后面还外加一个括号
    js十进制转换二进制
    css_毛玻璃
    css桌布样式
    ocr api 识别表格 图片
    Linux查看日志常用命令
    linux find 命令查找文件和文件夹
    docker上安装airflow
    文件权限中 chmod、u+x、u、r、w、x分别代表什么
  • 原文地址:https://www.cnblogs.com/zifeiynoip/p/11482986.html
Copyright © 2020-2023  润新知