蓝桥杯————翻硬币问题

蓝桥杯翻硬币问题

    • 题目
    • 思路
    • 1.指针写的
    • 2.string写的

题目

问题描述
小明正在玩一个“翻硬币”的游戏。

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

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

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

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

我们约定:把翻动相邻的两个硬币叫做一步操作,那么要求:

输入格式
两行等长的字符串,分别表示初始状态和要达到的目标状态。每行的长度<1000

输出格式
一个整数,表示最小操作步数。

样例输入1
********** ( 只是为了适应格式)
o**** o****
样例输出1
5

思路

这道题呢说思路的话,我就是拿到题就直接写了,没有多想什么(但是我自己知道算法的效率不怎么高),所以还请大神能在下面提供更好的思路(勿喷哈哈)

1.指针写的

#include
#include
#include
#include
#include
using namespace std;
int dfs(int N, char *str, char * str2)
{
     
    int count=0;
    for(int i=0;i<N;i++){
     
        if(str[i]==str2[i]){
     
            continue;
    }else
    {
     
        if(str[i]=='*'){
     
            str[i]='o';
        }else{
     
            if(str[i]=='o')
               str[i]='*';
        }
        if(str[i+1]=='*'){
     
            str[i+1]='o';
        }else{
     
            if(str[i+1]=='o')
               str[i+1]='*';
        }        
        count++;  
    }

    }
    
    return count;
}
int main(){
     
    
    char* str = (char*)malloc(100*sizeof(char));
    char* str2 = (char*)malloc(100*sizeof(char));
    cin>>str;     
    cin>>str2;      
    int num;
    int N = strlen(str);
    num=dfs(N,str,str2); 
    cout<<num;
    return 0;

}

也可以用new,看你们想用啥了。

2.string写的

#include
#include
#include
#include
#include
using namespace std;
int dfs(int N, string str, string str2)
{
     
    int count=0;
    for(int i=0;i<N;i++){
     
        if(str[i]==str2[i]){
     
            continue;
    }else
    {
     
        if(str[i]=='*'){
     
            str[i]='o';
        }else{
     
            if(str[i]=='o')
               str[i]='*';
        }
        if(str[i+1]=='*'){
     
            str[i+1]='o';
        }else{
     
            if(str[i+1]=='o')
               str[i+1]='*';
        }        
        count++;  
    }

    }
    
    return count;
}
int main(){
     
    
    string str;
    string str2;
    cin>>str;     
    cin>>str2;      
    int num;
    int N = str.size();
    num=dfs(N,str,str2); 
    cout<<num;
    return 0;

}

还是要加油啊,最近有点忙,自己很多的想法也没实现,也没有时间写一些小项目,只能更新些不算厉害的算法题了,加油!
想,就去做

你可能感兴趣的:(算法,c++,算法基础,c++,算法)