Triangle

Triangle

https://ac.nowcoder.com/acm/problem/200317

题目: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;
}
全部评论

相关推荐

昨天 00:37
已编辑
山东大学 C++
小浪_Coding:你问别人,本来就是有求于人,别人肯定没有义务免费回答你丫, 有点流量每天私信可能都十几,几十条的,大家都有工作和自己的事情, 付费也是正常的, 就像你请别人搭把手, 总得给人家买瓶水喝吧
点赞 评论 收藏
分享
09-01 11:31
门头沟学院 Java
buul:七牛云的吧,感觉想法是好的,但是大家没那么多时间弄他这个啊。。。不知道的还以为他是顶尖大厂呢还搞比赛抢hc,只能说应试者的痛苦考察方是无法理解的,他们只会想一出是一出
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务