题目链接:
https://pintia.cn/problem-sets/994805342720868352/problems/994805462535356416
题目大意:
输入一个长度大于5小于80的字符串,要求以U型输出,顺序为先从U型的左上到左下,然后沿着底边从左到右,最后从U型的右下到右上,左右两侧的高度相同,且为小于底边的最大值。
思路分析:
本题有两个思路,一个是从二维数组的方式,先将字符存到二维字符数组中,再将整个数组输出的方法;还有一种是从控制输出的方法,分成两类,前n1-1行输出,以及最后一行输出。
本题不太难,只要能得出n1与字符串长度的关系,就能很容易得到解答。下面从二维数组的方式给出代码。
#include <cstdio>
#include <cstring>
int main()
{
char A[40][40], str[100];
scanf("%s",str);
int len = strlen(str);
int n1 = (len + 2)/3, n3 = n1, n2 = len + 2 - n1 - n3;
for(int i = 0; i < n1; i++)
for( int j = 0; j < n2; j++)
A[i][j] = ' ';
int pos = 0;//pos记录当前字符串下标。
for(int i = 0; i < n1; i++){
A[i][0] = str[pos++];
}
for(int i = 1; i < n2; i++){
A[n1 - 1][i] = str[pos++];
}
for(int i = n3 - 2; i >= 0; i--){
A[i][n2 - 1] = str[pos++];
}
for(int i = 0; i < n1; i++){
for(int j = 0; j < n2; j++){
printf("%c",A[i][j]);
}
printf("\n");
}
return 0;
}