2016華為機試-糖果消消除實現
阿新 • • 發佈:2018-12-30
#include<iostream> #include<string> using namespace std; bool isexchange(char a1[5][5],int x,int y) { int count=1; for (int left=y-1; left >=0; left--) { if (a1[x][y]==a1[x][left]) { count++; } else { break; } } if (count>=3) { return true; } for (int right=y+1;right<5;right++) { if (a1[x][y]==a1[x][right]) { count++; } else { break; } } if (count>=3) { return true; } else { count=0; } for (int up=x-1;up>=0; up--) { if (a1[x][y]==a1[up][y]) { count++; } else { break; } } if (count>=3) { return true; } for (int down=x+1;x<5;++down) { if (a1[x][y]==a1[down][y]) { count++; } else { break; } } if (count>=3) { return true; } else { return false; } } int main() { string str; while(cin>>str) { int len=str.size(); if (len!=25) { cout<<"NO"<<endl; return 0; } char a[5][5]; int k=0; for (int i = 0; i <5 ; ++i) { for (int j = 0; j <5 ; ++j) { a[i][j]=str[k]; k++; } } int allcout=0; for (int i1 = 0; i1 <5 ; ++i1) { for (int j1 = 0; j1 <5 ; ++j1) { bool flag=false; if (i1>0)//up { swap(a[i1][j1],a[i1-1][j1]); flag=isexchange(a,i1,j1); if (flag==true) { int re=i1*5+j1+1; cout<<"YES"<<" "<<re<<endl; allcout=1; continue; } swap(a[i1][j1],a[i1-1][j1]); } if (i1<4) //down { swap(a[i1][j1],a[i1+1][j1]); flag=isexchange(a,i1,j1); if (flag==true) { int re=i1*5+j1+1; cout<<"YES"<<" "<<re<<endl; allcout=1; continue; } swap(a[i1][j1],a[i1+1][j1]); } if (j1>0) //left { swap(a[i1][j1],a[i1][j1-1]); flag=isexchange(a,i1,j1); if (flag==true) { int re=i1*5+j1+1; cout<<"YES"<<" "<<re<<endl; allcout=1; continue; } swap(a[i1][j1],a[i1][j1-1]); } if (j1<4)//right { swap(a[i1][j1],a[i1][j1+1]); flag=isexchange(a,i1,j1); if (flag==true) { int re=i1*5+j1+1; cout<<"YES"<<" "<<re<<endl; allcout=1; continue; } swap(a[i1][j1],a[i1][j1+1]); } } } if (allcout==0) { cout<<"NO"<<endl; } } }