草稿上写的规律很明显了。
#include<cstdio>
#include <cstring>
#include<algorithm>
#include <iostream>
using namespace std;
int a[100]={0,0,0,0,0,3,4};
void init()//预处理n2的长度,存放在数组a中
{
for(int i = 7 ;i < 100;i += 3)
{
a[i] = (i + 2) / 3;
}
for(int i = 8 ;i < 100;i += 3)
{
a[i] = a[i - 1] + 1;
}
for(int i = 9 ;i < 100;i += 3)
{
a[i] = a[i - 1] + 1;
}
}
int main()
{
char str[100];
init();
while(scanf("%s",str)!=EOF){
int len = strlen(str);
int bsnum = a[len] - 2;//空格数
int vernum = (len - a[len]) / 2; //要输出有空格的行数有几行
for(int i = 0 ;i < vernum ;i++)
{
printf("%c",str[i]);
for(int j = 0; j < bsnum;j++)
printf(" ");
printf("%c\n",str[len - 1 - i]);
}
for(int i = vernum; i <= vernum + a[len] - 1;i++ )
printf("%c",str[i]);
printf("\n");
}
return 0;
}