思路:列出前几种情况(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;
}

版权声明:本文为博主原创文章,如有错误,恳请大家在评论区指出,在下不胜感激~如要转载注明出处即可~