zoukankan      html  css  js  c++  java
  • 翻硬币

    桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零)。

    比如,可能情形是:**oo***oooo

    如果同时翻转左边的两个硬币,则变为:oooo***oooo

    现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

    我们约定:把翻动相邻的两个硬币叫做一步操作。

    输入格式

    两行等长的字符串,分别表示初始状态和要达到的目标状态。

    输出格式

    一个整数,表示最小操作步数

    数据范围

    输入字符串的长度均不超过100。
    数据保证答案一定有解。

    输入样例1:

    **********
    o****o****
    

    输出样例1:

    5
    

    输入样例2:

    *o**o***o***
    *o***o**o***
    

    输出样例2:

    1


    我们可以来模拟一下这个翻硬币的过程,看样例1,我们从字符串的最左边开始进行遍历,当i==0时,发现s1[0]!=s2[0],
    于是我们将s1[0]和s1[1]翻面,然后接着遍历,发现s1[1]翻面后与s2[1]不相等,然后再将s1[1]和s2[1]翻面,以此类推....
    最后我们发现,从左往右依次遍历便可以得出我们想要的情况
    AC代码:
    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
        ios::sync_with_stdio(false);
        string s1,s2;
        int ans = 0;
        cin>>s1>>s2;
        for(int i = 0;i<s1.size()-1;++i){
            if(s1[i]!=s2[i]){
                ans++; //一旦有不同就翻面,次数+1; 
                if(s1[i]=='*') s1[i]='o';
                else  s1[i] = '*';
                
                if(s1[i+1]=='*') s1[i+1] ='o';
                else s1[i+1] = '*';
            }
        }
        cout<<ans<<endl;
        return 0;
    }
     
    
    
  • 相关阅读:
    Java实现 LeetCode 640 求解方程(计算器的加减法计算)
    PHP zip_entry_compressedsize() 函数
    PHP zip_entry_close() 函数
    PHP zip_close() 函数
    PHP xml_set_unparsed_entity_decl_handler() 函数
    PHP xml_set_processing_instruction_handler() 函数
    格列隙 | grid-row-gap (Grid Layout)
    格列隙 | grid-column-gap (Grid Layout)
    格列端 | grid-column-end (Grid Layout)
    格列开始 | grid-column-start (Grid Layout)
  • 原文地址:https://www.cnblogs.com/ssfannnnn/p/14318676.html
Copyright © 2011-2022 走看看