Zff121017 2024-06-05 16:21 采纳率: 25%
浏览 3

二维数组基本练习——蛇形填数C++04

二维数组基本练习——蛇形填数C++
不会
有代码最好(记得写题号)
题目1描述
在nn方阵里填入1,2,3,…,nn,要求填成蛇形。例如n=5时方阵为:
5 4 3 2 1
6 19 18 17 16
7 20 25 24 15
8 21 22 23 14
9 10 11 12 13

输入
一行 n(n<=8)
输出
蛇形填数矩阵
样例输入 复制
5
样例输出 复制
5 4 3 2 1
6 19 18 17 16
7 20 25 24 15
8 21 22 23 14
9 10 11 12 13

题目2描述
在nn方阵里填入1,2,3,…,nn,要求填成蛇形。例如n=5时方阵为:
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4

输入
一行n(n<=8)
输出
蛇形填数矩阵
样例输入 复制
5
样例输出 复制
1 2 3 4 5
2 3 4 5 1
3 4 5 1 2
4 5 1 2 3
5 1 2 3 4

  • 写回答

3条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-06-05 16:21
    关注

    引自免费微信小程序:皆我百晓生

    为了帮助您解决这两个题目,我会提供一个通用的C++代码示例,可以用来实现两种不同方向的蛇形填充。

    以下是题目1的代码,从右上角开始填充,逆时针方向移动:

    #include <iostream>
    using namespace std;
    
    void fillSerpentine(int n) {
        int arr[n][n];
        int num = 1;
        
        for (int i = 0; i < n; ++i) {
            for (int j = i; j >= 0 && j < n - i; ++j) {
                if (i % 2 == 0) { // 偶数行
                    arr[i][j] = num++;
                } else {          // 奇数行
                    arr[i][j] = num--;
                }
            }
        }
    
        // 输出矩阵
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                cout << arr[i][j] << " ";
            }
            cout << endl;
        }
    }
    
    int main() {
        int n;
        cin >> n;
        fillSerpentine(n);
        return 0;
    }
    

    这段代码首先定义了一个fillSerpentine函数,它接受一个整数参数n表示矩阵的大小。然后我们创建一个arr二维数组,并初始化数字num为1,用于填充矩阵。接下来,我们通过两个嵌套循环遍历矩阵中的每个位置。奇数行(按行索引i判断)从左到右填充递减的数字,偶数行则从右到左填充递增的数字。最后,我们在main函数中读取用户输入并调用fillSerpentine函数。

    对于题目2,我们需要稍微调整一下逻辑,使其从左上角开始填充,顺时针方向移动。下面是相应的代码:

    void fillSerpentine_v2(int n) {
        int arr[n][n];
        int num = 1;
        
        for (int i = 0; i < n; ++i) {
            for (int j = i; j >= 0 && j < n - i; ++j) {
                if (i % 2 == 1) { // 奇数行
                    arr[i][j] = num++;
                } else {          // 偶数行
                    arr[i][j] = num--;
                }
            }
        }
    
        // 输出矩阵
        for (int i = 0; i < n; ++i) {
            for (int j = 0; j < n; ++j) {
                cout << arr[i][j] << " ";
            }
            cout << endl;
        }
    }
    

    这个版本的fillSerpentine_v2函数与之前的函数非常相似,只是将判断奇偶行的条件从i % 2 == 0更改为i % 2 == 1。其余部分保持不变。

    您可以根据需要选择其中一个函数进行编译和运行。这两个函数都可以满足题目要求,并且在main函数中可以根据需要调用不同的函数。例如,如果您想测试第二个题目,只需将fillSerpentine(n)替换为fillSerpentine_v2(n)即可。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月5日

悬赏问题

  • ¥15 模电中二极管,三极管和电容的应用
  • ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
  • ¥15 气象网格数据与卫星轨道数据如何匹配
  • ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
  • ¥15 微软账户问题不小心注销了好像
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络