密碼脫落——藍橋杯

Ajiajiajia發表於2018-03-30
#include<iostream>
#include<cstdio>
#include<cstring>
#include <stdio.h>
#include <iostream>
#include <cstdlib>
#include<math.h>
#include<algorithm>
#include<string.h>
using namespace std;
int main (){
    char a[1000];
    cin>>a;
    int i,j,ti,tj,ni,nj,sum;
    i=0;
    sum=0;
    j=(int)strlen(a) -1;
    
    while(i<=j){
        //第一種情形:前後相等,則向中間靠攏
        if(a[i]==a[j]){
            i++;
            j--;
        }
        //第二種情形,前後不相等,則就需要找一個最小的移動距離值
        else{
            //每次對資料進行更新、重新賦值
            ti=i;
            tj=j;
            //以右邊j為標準,移動左邊元素
            while((a[ti]!=a[j])&&ti<j){
                ti++;
            }
            //以左邊i為標準,移動右邊元素
            while((a[i]!=a[tj])&&tj>=i){
                tj--;
            }
            //找 i右移、j左移中最小的距離
            ni=ti-i;
            nj=j-tj;
            
            if(nj>ni){
                sum=sum+ni;
                i=ti;      //將i設定為新起點
            }
            else{
                sum=sum+nj;
                j=tj;      //將j設定為新起點
            }
        }
    }
    cout<<sum<<endl;
    return 0;
}
複製程式碼