输入一个长度不超过50的由小字字母构成的字符串,输出由这个字符序列构成的最大的正方形。
输入格式:
由小写字母构成的一个字符串。
输出格式:
将字符串围成最大可能的正方形输出,字符串从正方形的左上方开始,按顺时针方向绕行。
输入样例1:
a
输出样例1:
a
输入样例2:
happy
输出样例2:
ha
pp
输入样例3:
abcdefghijklmn
输出样例3:
abcd
l e
k f
jihg
(摘自pintia.cn)
解答:
1 #include<iostream> 2 #include<string> 3 using namespace std; 4 int main() 5 { 6 string str; //输入的字符串 7 int side,row(1); //side是边长,row是第几行 8 cin>>str; //输入字符串 9 side=str.length()/4+1; //计算边长 10 for(int i(0);i<side;i++) //输出第一行,长度为side 11 cout<<str[i]; 12 if(side>1) //如果行数大于1 13 { 14 cout<<endl; 15 for(;row<side-1;row++) //输出剩余side-2行,不包括最后一行 16 { 17 cout<<str[(side-1)*4-row]; 18 for(int k(0);k<side-2;k++) 19 cout<<' '; 20 cout<<str[(side-1)+row]<<endl; 21 } 22 for(int i(0);i<side;i++) //输出最后一行 23 cout<<str[(side-1)*3-i]; 24 } 25 return 0; 26 }
解析:
见代码注释。
std::ends和‘ ’的输出不同,std::ends的输出结果为‘\0’,虽然输出的样式相同,但是不是同一个字符。