不说废话先上代码原题链接
#include<bits/stdc++.h>
using namespace std;
string s;
char arr[100][100];
int in=1;
int l=0;
int cnt=0;
int main(){
for(int i=0;i<100;i++){
for(int j=0;j<100;j++)arr[i][j]=' ';
}
getline(cin,s);
int n=s.length()-1;
while(n>0){
in++;
n--;
if(n>=2){
l++;
n-=2;
}
}
for(int i=0;i<l;i++)arr[i][0]=s[cnt++];
for(int i=0;i<in;i++)arr[l][i]=s[cnt++];
for(int i=l-1;i>=0;i--)arr[i][in-1]=s[cnt++];
for(int i=0;i<=l;i++){
for(int j=0;j<in;j++){
cout<<arr[i][j];
}cout<<endl;
}
}
具体思路
每次给底层一个两个共两个直到所有字母都分配完(两侧不能大于底层 每次先分配给中心)
按照u型顺序线性分配即可
中文释义
给定任意N字符串(≥5) 字符,要求您将字符组成U形。例如,helloworld可以打印为:
h !
e d
l l
lowor
也就是说,字符必须按原始顺序打印,从左垂直线n1开始从上到下打印 字符,然后沿底线从左到右使用n2 字符,最后用n3沿垂直线自下而上 角色。更重要的是,我们希望U尽可能地平方,也就是说,必须满足n1=n3=最大{k | k≤n2 三个人≤n2≤N}与n1+n2+n3−2=N。
输入规格:
每个输入文件包含一个测试用例。每个大小写包含一个字符串,一行不少于5个字符,不超过80个字符。字符串不包含空格。
输出规格:
对于每个测试用例,按照描述中指定的U形打印输入字符串。