PAT A1031 Hello World for U 首先根据题意模拟出字符串长度和n1,n2的关系(n2尽可能大,但不得大于n1),得到n1,n2后,可以仿照螺旋矩阵的填充方法将字符填入n1行n2列的二维数组(空位初始空格) #include<iostream> #include<string> #include<vector> using namespace std; vector<vector<char> > vv; int main(){ string s; cin >> s; int len = s.length(); int n1,n2; if(len % 3) n1 = len / 3 + 1; else n1 = len / 3; n2 = len - n1 * 2 + 2; vv.resize(n1,vector<char>(n2)); for(int i = 0;i < n1;i ++) for(int j = 0;j < n2;j ++) vv[i][j] = ' '; int cnt = 0,i = 0,j = 0; while(cnt < len){ while(cnt < len && i < n1 - 1){ vv[i][j] = s[cnt ++]; i ++; } while(cnt < len && j < n2 - 1){ vv[i][j] = s[cnt ++]; j ++; } while(cnt < len && i >= 0){ vv[i][j] = s[cnt ++]; i --; } } for(int i = 0;i < n1;i ++){ for(int j = 0;j < n2;j ++) printf("%c",vv[i][j]); printf("\n"); } return 0; }