小猴编程周赛C++ | 2022年秋第6周T2二维码

学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!

附上汇总贴:小猴编程C++ | 汇总-CSDN博客


【题目描述】
小猴在扫描二维码登录某一个网页时,发现尝不论以怎样的角度,比如倒着、斜着、横着等,都可以很快识别二维码。小猴很好奇,通过他查阅大量资料之后,终于明白其中的原理。简单来说,二维码内是有三个定位点,每次扫描的时候会根据定位点将二维码进行旋转,再识别信息。
我们简化一下问题,现在研究一下只通过与二维码水平和竖直的方向进行扫描,那么在扫码过程中会出现以下四个不同情况:
[图片]

注:红色框起来的均为二维码内的定位点。
上述四种情况最后旋转的结果都为:
[图片]

给定你一个 n × n n\times n n×n矩阵a,矩阵a只包含0、1和#,用来表示二维码,其中#表示二维码中的定位点,保证矩阵a中只有三个#且均在矩阵的顶角处。
例如 3 × 3 3\times3 3×3的二维码:
#1#
101
#01
请你帮助小猴计算给定"二维码"最终旋转的结果(即三个#分别在左上角、右上角、左下角)
【输入】
第一行,包含一个整数n;
接下来n行,每行包含一个长度为n的字符串。
【输出】
输出包含n行,每行一个长度为n字符串,表示该"二维码"最终旋转的结果。
【输入样例】

3
#1#
101
#01

【输出样例】

#1#
101
#01

【代码详解】
[图片]

#include <bits/stdc++.h>
using namespace std;
const int N = 1e3+10;
int n;
string s[N];
void print1()  // 原样输出
{
    for (int i=0; i<n; i++) cout << s[i] << endl;
}
void print3()  // 逆时针90°输出
{
    for (int j=n-1; j>=0; j--) {
        for (int i=0; i<n; i++) {
            cout << s[i][j];
        }
        cout << endl;
    }
}
void print2()  // 顺时针90°输出
{
    for (int j=0; j<n; j++) {
        for (int i=n-1; i>=0; i--) {
            cout << s[i][j];
        }
        cout << endl;
    }
}
void print4()  // 旋转180°输出
{
    for (int i=n-1; i>=0; i--) {
        for (int j=n-1; j>=0; j--) {
            cout << s[i][j];
        }
        cout << endl;
    }
}
int main()
{
    cin >> n;
    for (int i=0; i<n; i++) {
        cin >> s[i];
    }
    if (s[0][0]=='#' && s[0][n-1]=='#') {  // 判断左上角和右上角
        if (s[n-1][0]=='#') print1();  // 如果左下角为'#',则原样输出
        else print3();  // 否则逆时针90°输出
    }
    else if (s[0][0]=='#') print2();  // 此时需要顺时针90°转换
    else print4();  // 旋转180°
    return 0;
}

【运行结果】

#1# 
101
#01
#1#
101
#01
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值