#include <cstdio>
#include <cstring>
#include <iostream>
#include <string>
using namespace std;
int main() {
char str[85]={'\0'};
while (cin.getline(str, 80)) {
int N = strlen(str);
int a = N/3;
int b = N%3;
int but_len=a+b;
int span_len=but_len-2;
while(but_len<3 || a+1>but_len){
but_len+=2;
span_len+=2;
a--;
}
for(int i=0;i<a;i++){
printf("%c%*c\n",str[i],span_len+1,str[N-1-i]);
}
for(int j=a;j<N-a;j++){
printf("%c",str[j]);
}
cout<<endl;
}
}
// 64 位输出请用 printf("%lld")
思路:首先把接收到的字符串拆成3等分(对应题中n1=n3<=n2且3<=n2<=N),str.length/3,1.若除不尽就把余数加到底边n2上,然后这种情况一定满足条件n1=n3<=n2且3<=n2<=N,输出就是正确答案;2.若除的尽,则需要调整底边和左右两边的程度,知道其满足条件n1=n3<=n2且3<=n2<=N;
关键点:使用cin.getline(str, 80)函数,直接读取一行数据到字符串(参数80规定读取的长度,防止char数组溢出);
strlen( )函数求出字符串的长度;
printf("%c%*c\n",str[i],span_len+1,str[N-1-i]); str[i]对应第一个%c、str[N-1-i]对应第二个%*c、span_len+1对应*(表示第二个%*c输出的长度,会在字符前面补空格);

京公网安备 11010502036488号