这个题目做法就是 把字符串的头指针 与 尾指针 比较 哪个字符小取 小的字符加入到新的空字符串中
当 头尾字符相同的时候 两个指针同时向中心移动一位 继续比较,直到头尾字符出现区别或者是直到头尾超过尾指针。
输出时候注意格式 每80个换一行 ,当字符串的长度不被80 整除的时候在最后还要加一个换行。
贪心:有小的先取小的,相等的时候 就优先取两个相等里面 当他们之后相比较 较小的那个 ,如果一直相等则随便取。
#include"iostream"
#include"string"
#include"algorithm"
using namespace std;
int main()
{
int n;
while(cin>>n)
{
char a[2500];
string b=""/*,c*/;
for(int i=0;i<n;i++)
{
cin>>a[i];
b+=a[i];
}
//c=b;
//cout<<b<<endl<<c<<endl;
//reverse(c.begin(),c.end());
string d="";
int Start=0,End=n-1; //头尾指针
while(Start<=End)
{
bool flag=false; //标志 说明是头尾字符的大小区别
for(int i=0;Start+i<End;i++) //头指针能移动的最大范围要小于 尾指针 与尾指针相同的时候比较没有意义,超过尾指针的时候越界
<span style="white-space:pre"> </span>if(b[Start+i]<b[End-i]) /*比较出结果就跳出循环,否者头尾指针继续向中心靠近*/
{flag=true;break;}
else if(b[Start+i]>b[End-i])
{flag=false;break;}
if(flag) d+=b[Start++]; //判断
else d+=b[End--];
}
for(int i=0;i<d.size();i++)
{
cout<<d[i];
if((i+1)%80==0) cout<<endl;
}
if(d.size()%80) cout<<endl;
}
return 0;
}