==> 原题链接
题目概述
反复从给定的字符串的 头 或 尾 取出字母,组成一个字典序最小的新的字符串。注意每80个字符换行。
思路
贪心。每次比较给定字符串和 其顺序颠倒的字符串的字典序,输出即可。
代码
#include <stdio.h>
int n;
char str[2000 + 10] = "";
void solve();
int main()
{
int i;
freopen("data.txt", "r", stdin);
freopen("data.out", "w", stdout);
scanf("%d", &n);
for (i = 0; i < n; i++)
{
scanf("%s", str + i);
}
solve();
return 0;
}
void solve()
{
int i;
int p = 0, a = 0, b = n - 1, left, right;
while (a <= b)
{
if (a == b)
{
printf("%c\n", str[a]);
break;
}
for (i = 0; a + i <= b - i; i++)
{
left = a + i;
right = b - i;
if (p >= 80)
{
printf("\n");
p = 0;
}
if (str[left] != str[right])
{
if (str[left] < str[right])
{
printf("%c", str[a]);
a++;
}
else
{
printf("%c", str[b]);
b--;
}
p++;
break;
}
else
{
if ((left == right) || (right - left == 1))
{
printf("%c", str[a]);
a++;
p++;
}
else
{
continue;
}
}
}
}
}