猫史档案馆


「Origin、拾柒」

「Origin、拾柒」

Lv.1

半退,周末偶尔看看(悲).我会回来滴

获赞:2708收藏:1889浏览:220723作品收藏:205

签名:拾柒の小宇宙↓↓↓ 师傅:劳埃德福杰、屑酷桃 推荐:imgainary_unmber+2fedty +昵称副本+满脑子都是胡桃+乾坤小火柴 朋友:昵称副本、乾坤小火柴、静好、最简真分数 可咨询UI交互系统/设计 不常上线.请见谅. 假期也没时间.*悲

回复帖子评论
上一页3 页 / 共 8下一页

传说中没有一个毛毡人能做出来 中回复

说明

现有 2^nx2^nns10)名作整者站成一个正方形方阵等候 kkksc03 的发落。kkksc03 决定教免一些作整者。他将正方形先

阵均分为 4个更小的正方形矩阵,每个更小的矩阵的边长是原矩阵的一半。其中左上角那一个矩阵的所有作整者都将得

到教免,剩下3个小矩阵中,每一个矩阵继续分为 4 个更小的矩阵,然后通过同样的方式教免作整者....直到矩阵无法

再分下去为止。所有没有被赦免的作弊者都将被处以棕名处罚

给出n,请输出每名作弊者的命运,其中 0代表被赦免,1代表不被救免。

输入格式

个整数n。

输出格式

2^nx2^n的01矩阵,代表每个人是否被赦免。数字之间有一个空格

嗯……

 

2024-06-30T22:09:59 点赞:0

传说中没有一个毛毡人能做出来 中回复

以下是一个C++程序,用于生成并打印出符合给定条件的01矩阵。该程序使用递归方法将大矩阵划分为更小的矩阵,并标记左上角矩阵的作弊者为被赦免。

cpp
#include <iostream>
#include <vector>

using namespace std;

// 递归函数来填充矩阵
void fillMatrix(vector<vector<int>>& matrix, int n, int startRow, int startCol) {
// 递归终止条件
if (n == 1) {
// 当n为1时,只有一个元素,位于左上角,标记为0(被赦免)
matrix[startRow][startCol] = 0;
return;
}

// 否则,将矩阵划分为四个更小的矩阵
int halfSize = n / 2;

// 左上角矩阵
fillMatrix(matrix, halfSize, startRow, startCol);

// 右上角矩阵
fillMatrix(matrix, halfSize, startRow, startCol + halfSize);

// 左下角矩阵
fillMatrix(matrix, halfSize, startRow + halfSize, startCol);

// 右下角矩阵(无需特别标记,因为它们默认为1)

// 剩下的部分(即除了左上角矩阵)保持为1(不被赦免)
// 因为递归调用时已经处理了左上角,所以我们只需要确保其他地方是1
for (int i = startRow; i < startRow + halfSize; ++i) {
for (int j = startCol + halfSize; j < startCol + n; ++j) {
matrix[i][j] = 1;
}
}
for (int i = startRow + halfSize; i < startRow + n; ++i) {
for (int j = startCol; j < startCol + n; ++j) {
matrix[i][j] = 1;
}
}
}

// 主函数
int main() {
int n;
cin >> n; // 输入n

// 初始化2^n x 2^n的矩阵,所有元素默认为1(不被赦免)
vector<vector<int>> matrix(1 << n, vector<int>(1 << n, 1));

// 调用递归函数填充矩阵
fillMatrix(matrix, 1 << n, 0, 0);

// 打印矩阵
for (const auto& row : matrix) {
for (int num : row) {
cout << num << " ";
}
cout << endl;
}

return 0;
}

请注意,由于n表示的是矩阵的边长是以2为底数的指数,所以当我们初始化矩阵大小时,我们使用1 << n(即2的n次方)来得到正确的矩阵大小。此外,由于矩阵的初始所有元素都被设为1(表示不被赦免),因此在递归函数中我们只需要关心如何设置左上角矩阵的值为0,而不需要显式地将其他部分设为1(因为它们已经是1了)。

2024-06-30T22:13:58 点赞:0

怎么获得勋章? 中回复

https://shequ.codemao.cn/friendly_protocol 点开自己看着办

2024-07-02T21:14:57 点赞:0

一个小游戏:请打出楼下名字的第一个字和最后一个字 中回复

T米

2024-07-02T21:16:55 点赞:1

【灌水】为什么英国人的数学普遍不好 中回复

逆天

2024-07-02T21:17:18 点赞:1

拾柒的UI小铺-社区猜名人活动-4 中回复

喵d

2024-07-02T21:19:50 点赞:0

[灌水]我妹不仅会魔法攻击,还会物理攻击 中回复

梅菜瘦肉也是一条生命呢

2024-07-02T21:23:29 点赞:1

BOX3:视角 中回复

沃 不 到 啊 其 实 劳 资 不 玩 Box 3

2024-07-02T21:29:25 点赞:0

[灌水]我妹不仅会魔法攻击,还会物理攻击 中回复

2024-07-02T21:30:37 点赞:2

[灌水]我妹不仅会魔法攻击,还会物理攻击 中回复

2024-07-02T21:31:03 点赞:3

做小黑跑酷招人啦! 中回复

+1

2024-07-02T21:34:01 点赞:0

一个小游戏:请打出楼下名字的第一个字和最后一个字 中回复

困嘿

2024-07-02T22:00:36 点赞:1

这个有问题怎么办 中回复

还好劳资有小鱼插件

不然看个图都看不清

2024-07-02T22:04:42 点赞:0

一个大大大大大大大大大大大大大问题 中回复

https://edu.codemao.cn/ 自己看着办

2024-07-02T22:35:51 点赞:1

找师傅啊找师傅 中回复

探头

2024-07-03T17:32:04 点赞:0

【梗体中文】现已推出K4版 中回复

眼睛瞎力awa

2024-07-03T19:21:32 点赞:1

【补档】收徒 虽然目前我腿毛了 但我还是有点潜力的好吧 大神还是别搞了awa !!!! 中回复

小蜜桃:我来~

2024-07-03T19:23:21 点赞:0

【补档】收徒 虽然目前我腿毛了 但我还是有点潜力的好吧 大神还是别搞了awa !!!! 中回复

离谱

这个帖子的关系:

我先发的→深圳激活码抄了发了→初小白大佬发了

一个字,六

2024-07-03T19:24:50 点赞:1

【补档】不懂就问,这是你猫风景线吗 中回复

眼 睛 瞎 力

2024-07-03T19:25:44 点赞:1

有些人是不是真的剑 中回复

2024-07-03T19:57:35 点赞:0

有些人是不是真的剑 中回复

2024-07-03T19:58:01 点赞:0

【梗体中文】现已推出K4版 中回复

可以发到这里面捏喵zh-CN#google_vignette

2024-07-03T20:21:54 点赞:3

传说中没有一个毛毡人能做出来 中回复

为了解决这个问题,我们可以编写一个C++程序,该程序将递归地模拟题目中描述的矩阵分割和赦免过程。在每次递归调用中,我们将当前矩阵的左上角部分设置为0(表示赦免),然后对于剩下的三个区域(右上、左下、右下),我们递归地调用该函数并将它们继续分割。

#include <iostream>
#include <vector>

// 递归函数,用于填充矩阵
void fillMatrix(std::vector<std::vector<int>>& matrix, int size, int startRow, int startCol) {
    if (size == 1) {
        // 递归结束条件,直接设置左上角为0
        matrix[startRow][startCol] = 0;
        return;
    }

    // 设置左上角子矩阵为0
    for (int i = startRow; i < startRow + size; ++i) {
        for (int j = startCol; j < startCol + size; ++j) {
            matrix[i][j] = 0;
        }
    }

    // 递归处理剩下的三个子矩阵
    fillMatrix(matrix, size / 2, startRow, startCol + size / 2); // 右上角
    fillMatrix(matrix, size / 2, startRow + size / 2, startCol); // 左下角
    fillMatrix(matrix, size / 2, startRow + size / 2, startCol + size / 2); // 右下角

    // 对于剩下的三个子矩阵,将非左上角部分设置为1(表示不被赦免)
    for (int i = startRow; i < startRow + size; ++i) {
        for (int j = startCol + size / 2; j < startCol + size; ++j) {
            if (i == startRow || i == startRow + size - 1) continue; // 跳过左上角和右下角边界
            matrix[i][j] = 1;
        }
    }
    for (int i = startRow + size / 2; i < startRow + size; ++i) {
        for (int j = startCol; j < startCol + size; ++j) {
            if (j == startCol || j == startCol + size - 1) continue; // 跳过左上角和左下角边界
            matrix[i][j] = 1;
        }
    }
}

int main() {
    int n;
    std::cin >> n;

    // 初始化矩阵,大小为2^n x 2^n
    std::vector<std::vector<int>> matrix(1 << n, std::vector<int>(1 << n, -1)); // 初始化为-1表示未设置

    // 调用递归函数填充矩阵
    fillMatrix(matrix, 1 << n, 0, 0);

    // 输出矩阵
    for (const auto& row : matrix) {
        for (int val : row) {
            std::cout << val << " ";
        }
        std::cout << std::endl;
    }

    return 0;
}

请注意,我们在这里使用了1 << n来计算2的n次方,并用它来初始化矩阵的大小。-1用作矩阵的初始值,以表示尚未设置的值。在递归函数fillMatrix中,我们首先检查递归的结束条件(即size == 1),然后设置当前子矩阵的左上角为0,并递归地处理剩下的三个子矩阵。在递归调用之后,我们遍历剩下的三个子矩阵并将非左上角部分设置为1。

 

运行此程序并输入3将产生所需的输出。

2024-07-03T21:26:54 点赞:3

【梗体中文】现已推出K4版 中回复

可以发到这里面捏:greasyfork.org/

2024-07-03T21:30:27 点赞:1

这个人是谁,服了刷了100多再创 中回复

沃 来 抓 你 了 快 在 社 团 里 躲 开

2024-07-05T17:04:24 点赞:1

@猫站所有人 好无聊想整个社会实验 中回复

做啥做啥做啥做啥做啥做啥

2024-07-06T14:29:43 点赞:1

不是凭什么啊,首页这是怎么了 中回复

我是目害子

2024-07-06T14:30:55 点赞:1

菠菜面最近好冷清 中回复

没scs你就庆幸吧

2024-07-06T14:40:29 点赞:1

一个小游戏:请打出楼下名字的第一个字和最后一个字 中回复

ir

2024-07-06T18:07:15 点赞:0

有人要协作吗? 中回复

可以的

2024-07-06T18:10:29 点赞:0