矩阵,称为顺转n*m阶矩阵。输入 整数n,m,输出顺转n*m阶矩阵。 输入样例:5,5 输出样例:
1 2 3 4 5
16 17 18 19 6
15 24 25 20 7
14 23 22 21 8
13 12 11 10 9
想法:
对于这道题我们肯定是要实现所有结果的可能性,我们可以实现一个数组来表示方向
第一步就是向右边走,第二步向下面走,第三步向左边走,第四步向上面走,由于我们主要是面向矩阵写的所以我们就将1,2两部看成一个整体,3,4看成一个整体,因为第一步是与列长度有关的,第二步是与行的长度有关系的,这是不同的所以我们必须分开来算.我们先看下四个方向
int f[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; //4个方向
我们将四个方向设置好就可以了,然后用一个变量k来进行循环遍历就好了,值得一提的是循环遍历一下会发现它总共会循环n+m次然后因为我们每次是循环两次的所以总的循环数我们除以二不管n+m是偶数还是奇数进行的循环数就都是正确的,里面p,q全局进行跟踪每次计算完成后让p,q更新就好了,看下面的完整代码
#include#include #define max 105 int arr[max][max]; int f[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; //4个方向 int main() { int n,m,i,j,k=0,flag=0,N,M,p=1,q=0; //p和q是坐标开始值从1,0开始计算,第一个值就是1,1 scanf("%d%d",&n,&m); N=m,M=n; memset(arr,0,sizeof(arr)); //初始化 for(i=0;i<(N+M)/2;i++) { for(j=0;j 我们看看结果的输出:
首先是7*7的方阵
其次是8*9的矩阵
结果都是完全正确的!



