输入一个长度不超过50的由小字字母构成的字符串,输出由这个字符序列构成的最大的正方形。
输入格式:
由小写字母构成的一个字符串。
输出格式:
将字符串围成最大可能的正方形输出,字符串从正方形的左上方开始,按顺时针方向绕行。
输入样例1:
a
输出样例1:
a
输入样例2:
happy
输出样例2:
ha
pp
输入样例3:
abcdefghijklmn
输出样例3:
abcd
l e
k f
jihg
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
想法:
这题和螺旋方阵有点像,但还简单一点。有个以前没留意的坑点,弄了半天没弄出来,最后发现是++i和--i的问题。就是循环条件那弄错了。数组下标中,i++和++i还是有区别的。
代码:
#include<bits/stdc++.h>
using namespace std;
int len;//边长
string a;
char b[10][10]={' '};
int main(){
cin>>a;
if(a.size()<4) {cout<<a[0];return 0;}
for(int i=2;i<=7;i++){
if(i+(i-1)*2+i-2<=a.size()) len=i;
else break;
}
memset(b,' ',sizeof(b));
int k=0,l=len-1;
for(int i=0;;){
for(int j=0;j<=l;j++)
{b[i][j]=a[k];k++;}
for(int j=l;i<l;)//***
{b[++i][j]=a[k];k++;}
for(int j=l-1;j>=0;j--)
{b[i][j]=a[k];k++;}
for(int j=0;i>1;)//***
{b[--i][j]=a[k];k++;}
break;
}
for(int i=0;i<len;i++){
for(int j=0;j<len;j++){
cout<<b[i][j];
}
cout<<endl;
}
return 0;
}