高级光能
每次循环先填一行,再填一列;
注意要用四个变量分别记录
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。
代码链接在此想啥呢你?同样被我动了手脚
中级光能
这一题难,思路如下
用四个变量记录下没填过的第一行是第几行,没填过的最后一行是第几行,还没填的第一列是第几列,还没填的最后一列是第几列。
每次循环先填第一行,再填最后一列,再填最后一行,再填第一列
注意让程序及时结束,不要产生多余的循环
吕若朴在2020-04-12 17:08:48追加了内容
这题很难说清,你还是听老师讲吧