ブルーブリッジカップ————コインをひっくり返す問題


ブルーブリッジカップのコイン反転問題
  • 構想
  • 1.ポインタ書き込み
  • 2.stringが書いた

  • タイトル
    問題は明ちゃんが「コインをひっくり返す」ゲームをしていることを示しています.
    テーブルの上にはいくつかのコインが並んでいる.私たちは*で正面を表し、oで裏面を表します(小文字で、ゼロではありません).
    例えば、oo*oooo
    左の2つのコインを同時に反転すると、「oooo**oooo」になります.
    今の明ちゃんの問題は、初期状態と目標状態が既知で、毎回隣接する2つのコインを同時に反転するしかない場合、特定の局面に対して、少なくとも何回反転しなければならないのだろうか.
    隣接する2つのコインをひっくり返すことを一歩操作と呼び、要求します.
    初期状態と到達するターゲット状態を表すフォーマットの2行の等長文字列を入力します.1行あたりの長さ<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;
    
    }
    

    やはり顽张りましょう、最近少し忙しくて、自分の多くの考えも実现していないで、いくつかの小さいプロジェクトを书く时間もなくて、いくつかのすごいアルゴリズムの问题を更新するしかありません、顽张ります!考えたらやる