思路:列出前几种情况(N=5,6,7,8,9,10),找规律,发现n1始终是 (n+2)/3 向下取整 。n3和n1相等,因为左右两边相等,利用公式n2=n+2-n1-n3。
注意:一开始我没想到找规律,而是根据题意,遍历找到n1的max,但是失败了,看了晴神的思路,发现原来这么神奇。还是要学会打表找规律啊。
代码:
#include<cstdio>
#include<cstring>
int main(){
char word[100010];
scanf("%s",word);
int n = strlen(word);
int n1,n2,n3;
//列出前几种情况,找到规律
n1 = (n+2)/3; //向下取整
n3 = n1; //左右两边相同
n2 = n+2-n1-n3;
for(int i = 0;i < n1-1;i ++){
printf("%c",word[i]);
for(int j = 0;j < n2-2;j ++){
printf(" ");
}
printf("%c\n",word[n-1-i]);
}
//单独打印最下面一层
for(int i = n1-1;i < n2+n1-1;i ++){
printf("%c",word[i]);
}
printf("\n");
return 0;
}
版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~