/*
Is It Symmetric
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 391 Accepted Submission(s): 159
Problem Description
It is easy to see that a string of digits like 1234321 is symmetric with 4 being the central digit. However it is less obvious if we consider the string as a circular one and shift it to the left as 2343211. Your task is to write a program to check if a circular string is symmetric.
Input
Your program must read test cases from standard input.
The input file consists of several test cases. Each case occupies a line which contains the string. Each string contains less than 100 digits.
The input is finished by a "#".
Output
For each test case, your program must output to standard output. If the string is not symmetric, output "NO" in a line; else output "YES", followed by a space and the position of the center (the position index starts from 0). It is guaranteed that the length of the string is an odd number and the center is unique.
Sample Input
2112343
798
#
Sample Output
YES 5
NO
*/
#include<iostream>
#define N 10
#define LIMIT 10
using namespace std;
char TestCase[LIMIT][N];
bool Dflag = true;
int BorderFind(char array[], int length);
void CircuitLshift(char array[],int length, int digit);
void SymmetricJudge(char array[], int length, int digit);
void main()
{
int i = 0;
while (cin>>TestCase[i] && *TestCase[i] != '#')
{
i++;
}
for(int n=0; n<i; n++)
{
int length = strlen(TestCase[n]);
int border = BorderFind(TestCase[n], strlen(TestCase[n]));
CircuitLshift(TestCase[n], length, border);
SymmetricJudge(TestCase[n], length, border);
}
}
//寻找相邻两个数相同的边界
int BorderFind(char array[], int length)
{
int count = 0;
int i, Tborder;
for (i=0; i<length-1; i++)
{
if(array[i] == array[i+1])
{
Tborder = i + 1;
count++;
}
}
if(count == 1)
return Tborder;
if(count == 0)
{
Dflag = true;
return 0;
}
if(count > 1)
{
Dflag = false;
return 0;
}
}
//循环左移
void CircuitLshift(char array[],int length, int digit)
{
if(Dflag == false)
cout<<"NO"<<endl;
while (digit--)
{
char Ctemp;
Ctemp = array[0];
for (int i=0; i<length-1; i++)
{
array[i] = array[i+1];
}
array[length-1] = Ctemp;
}
}
//判断测试例子是否对称
void SymmetricJudge(char array[], int length, int digit)
{
if(Dflag == true)
{
for (int i=0; i<(length+1)/2; i++)
{
if(array[i] != array[length-i-1])
{
cout<<"NO"<<endl;
break;
}
if(i == (length+1)/2-1)
cout<<"YES"<<" "<<(length+1)/2+digit-1<<endl;
}
}
}
实验结果如下: