问题标题: 酷町堂:4701

0
1

0
已采纳
李致远
李致远
高级光能
高级光能

每次循环先填一行,再填一列;

注意要用四个变量分别记录

PS 方法0:

本题数据不大,实在不行就打表吧……

n<=10说明每个测试点代表n==k(第一个测试点k就==1,第二个则k==2以此类推……)

李致远在2020-04-16 00:05:08追加了内容

哦哦,对了,这题有一个简便算法【独家自创】

如果这一行的行数为奇数,则正常输出;

如果是偶数,则倒叙输出。

注意:两个数之间有两个空格。

ps 我已AC

李致远在2020-04-16 20:36:46追加了内容

eeeee

 ̄□ ̄|| ̄□ ̄|| ̄□ ̄||

被打脸打的好惨(窝被打脸打的好惨)

上面那个简便算法是弓形填数的呃呃呃呃呃

好吧,现在来说正解:
这是第一次测评的代码:

#include <iostream>
using namespace std;

int main() {
    int matrix[100][100];
    int m;
    int n;
    while(cin >> m >> n){

    for(int i = 0; i < m; ++i){
        for(int j = 0;j < n; ++j){
            cin >> matrix[i][j];
        }
    }

    int t;
    //while中专用来控制循环的一个变量 
    int i = 0, p = 0;
    //j的初始值表示一共有多少列 , p是行 
    int j = n, q = m;
    //q的初始值表示一共有多少行 ,i是列 
    while(i < j -1 || p <= q - 1){
        //while的条件为重点 
        //输出每次输出后形成矩阵的第一行 ,即第p行 
        虽说是错误代码,但依然删掉了一大部分

        p++;

        //输出每次输出后形成矩阵的最后一列,即第j行 
        for(t = p; t < q; t++){
            cout << " ";
            cout << matrix[t][j - 1];
        }
        j--;
        //输出每次输出后形成矩阵的最后一行,即第q行 
       
        q--;

        //输出每次输出后形成矩阵的第一列 ,即第i行 
        for(t = q - 1; t >= p; t--){
            cout << " ";
            cout << matrix[t][i];
        }
        i++;

    } 
}
    return 0;
}
这里写图片描述

显然,代码有问题,于是通过画图进行分析。

这里写图片描述

写时,会出现一种把已输出的元素再输出一遍的情况,因为个人水平有限,只好另引进一个二位 数组,记录是否曾经输出过这个二维数组的某个元素。

//完整代码

想啥呢你???

直接在我的错误代码上改吧!!!

 

如果你实在是不理解的话说,点我//因为此文章包含完整代码,所以网址有小错误

又是一种方法:

题目描述:给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时针螺旋顺序,返回矩阵中的所有元素。

示例:输入如图所示的二位数组,输出{1,2,3,4,8,12,11,10,9,5,6,7}

 解析:对于该题我们的出发思路应该是怎样可以控制两个下标(i和j(行和列下标))将一个二位矩阵按照螺旋输出呢?

首先我们可以看到。这样的螺旋输出总共有四个走向;分别为向右、向下、向左、向上,并且以这样的遍历顺序进行循环,所以我们只需要控制i和j这样走向即可。                                                                                                                                                     

接下来我们得控制i和j的范围即可,所以我们需要设置up(上)down(下)left(zuo)right(右)四个变量对二维矩阵进行压缩;并且每次通过这四个变量来控制i j。
代码链接在此想啥呢你?同样被我动了手脚

0
吕若朴
吕若朴
中级光能
中级光能

这一题难,思路如下

用四个变量记录下没填过的第一行是第几行,没填过的最后一行是第几行,还没填的第一列是第几列,还没填的最后一列是第几列。

每次循环先填第一行,再填最后一列,再填最后一行,再填第一列

注意让程序及时结束,不要产生多余的循环

吕若朴在2020-04-12 17:08:48追加了内容

这题很难说清,你还是听老师讲吧

0
我要回答