题目: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;
}
京公网安备 11010502036488号