题目:Triangle
来源:第二届太原理工大学程序设计新生赛决赛(重现赛)
解题思路
将三个 n-1 级的魔法阵放置在三个角上就可以得到 n 级魔法阵。
需要保证每行最后一个 \
符号的左边除了 /
和 \
符号外,其它全部是 .
符号。
1 级魔法阵:
./\ /__\
使用递归或迭代。1 级魔法阵可以从以下二维数组中得出:
./\. /__\
打印时,不打印前 n-1 行中后面的 .
。
C++代码
#include<iostream> #include<vector> using namespace std; vector<vector<char>> draw(int n){ if(n == 1){ vector<vector<char>> triangle(2, vector<char>(4)); triangle[0][0] = '.'; triangle[0][1] = '/'; triangle[0][2] = '\\'; triangle[0][3] = '.'; triangle[1][0] = '/'; triangle[1][1] = '_'; triangle[1][2] = '_'; triangle[1][3] = '\\'; return triangle; } vector<vector<char>> triangle = draw(n-1); int k = triangle.size(); vector<vector<char>> ans(2*k, vector<char>(4*k, '.')); for(int i=0; i<k; ++i){ for(int j=k; j<3*k; ++j) ans[i][j] = triangle[i][j-k]; } for(int i=k; i<2*k; ++i){ for(int j=0; j<2*k; ++j) ans[i][j] = triangle[i-k][j]; for(int j=2*k; j<4*k; ++j) ans[i][j] = triangle[i-k][j-2*k]; } return ans; } int main(){ int n; cin >> n; vector<vector<char>> triangle = draw(n); int k = triangle.size(); for(int i=0; i<k; ++i){ for(int j=0; j<k+i+1; ++j) cout << triangle[i][j]; cout << endl; } return 0; }