题目
题目链接
输入一个不包含空格的字符串,输出为u型,n1为左边,n2为底边,n3为右边,n1=n3=k<=n2。n1,n3尽可能大且要小于n2
题目分析
重难点:分析出n1,n2,n3规律。
画图分析得 n1=n3=(n+2)/3,n2=n-n1-n3+2
解题思路
思路01
1 分析出规律,直接打印
思路02
1 将字符存储于二维数组中,再打印
Code
Code 01
#include <iostream>
using namespace std;
int main(int argc,char * argv[]) {
string s;
cin>>s;
// 找出规律
int n1=(s.length()+2)/3,n3=n1,n2=s.length()-n1-n3+2;
for(int i=0; i<n1-1; i++) {
printf("%c",s[i]);
for(int j=1;j<n2-1;j++)printf(" ");
printf("%c
",s[s.length()-1-i]);
}
for(int i=0;i<n2;i++){
printf("%c",s[n1-1+i]);
}
return 0;
}
Code 02
#include <iostream>
using namespace std;
int main(int argc,char * argv[]) {
string s;
cin>>s;
// 找出规律
int n1=(s.length()+2)/3,n3=n1,n2=s.length()-n1-n3+2;
// 存于二维数组
char arr[90][90];
// 二维数组初始化为空格
for(int i=0; i<n1; i++) {
for(int j=0; j<n2; j++) {
arr[i][j]=' ';
}
}
//
int q = 0;
for(int i=0; i<n1; i++) {
arr[i][0]=s[q++];
}
for(int i=1; i<n2-1; i++) {
arr[n1-1][i]=s[q++];
}
for(int i=0; i<n3; i++) {
arr[n3-1-i][n2-1]=s[q++];
}
// 打印二维数组
for(int i=0; i<n1; i++) {
for(int j=0; j<n2; j++) {
printf("%c",arr[i][j]);;
}
printf("
");
}
return 0;
}
Code 03
#include <iostream>
#include <cstring>
using namespace std;
int main(int argc,char * argv[]) {
char c[81],u[30][30];
memset(u,' ',sizeof(u));
scanf("%s",c);
int n = strlen(c);
// 第一种计算方法
// int n1=(n+2)/3,n3=n1,n2=n+2-2*n1,index=0;
// 第二种计算方法
int n1=(n+2)/3,n3=n1,n2=(n+2)/3+(n+2)%3,index=0;
for(int i=0; i<n1; i++) u[i][0]=c[index++];
for(int i=1; i<=n2-2; i++) u[n1-1][i]=c[index++];
for(int i=n1-1;i>=0;i--) u[i][n2-1]=c[index++];
for(int i=0; i<n1; i++) {
for(int j=0; j<n2; j++)
printf("%c",u[i][j]);
printf("
");
}
return 0;
}