题141.pat甲级练习-1031 Hello World for U (20 分)
一、题目
二、题解
本题让打印一堆字母组成的满足约定条件的U,我是采用的整体思路是将字母放到一个适当大小的二维数组里头,然后打印二维数组。对此关键在于得到二维数组的行数和列数,相关操作见注释。
#include <bits/stdc++.h>
using namespace std;
int main()
{
string str;
cin>>str;
int N=str.length();
int row,col;
row=(N+2)/3;//计算行数,由打印的U以及题目给的n约定,字母书N对应的组成U的行数最大是等于(N+2)/3,此时是正好整除,其余都是向下取整了。
/*
//原先是先算列数后算行数,但这样有两个测试点过不去。但是我还是不知道为啥不行。。。
if((N+2)%3==0)
{
col=(N+2)/3;
}
else
{
col=(N+2)/3+1;
}
row=(N+2-col)/2;
*/
col=N+2-2*row;//用表示n约定的那个等式算出列数
char U[row][col];
fill(U[0],U[0]+row*col,' ');
int k=0;
for(int i=0;i<row;i++)
{
U[i][0]=str[k++];
}
k--;
for(int j=0;j<col;j++)
{
U[row-1][j]=str[k++];
}
k--;
for(int i=row-1;i>=0;i--)
{
U[i][col-1]=str[k++];
}
for(int i=0;i<row;i++)
{
for(int j=0;j<col;j++)
{
printf("%c",U[i][j]);
}
putchar('\n');
}
}