环形打印矩阵

来源:互联网 发布:词典推荐 知乎 魏 编辑:程序博客网 时间:2024/06/05 09:55

环形打印矩阵,如下图所示:



法一:

边界条件的基本思想如下:


这种方法当遇到奇数阶数的矩阵时,其中心元素由于边界条件而不能放到正确的位置,因此需要单独对这种情况进行判断。

#include<stdio.h>#include<vector>int main(){printf("请输入矩阵的阶数(小于0则退出):\n");int n;scanf("%d",&n);while(n>0){std::vector<int>v(n*n);//d=0:right;d=1:down;d=2:left;d=3:upfor(int col=n,row=n,i=1,loc=0,d=0,j;i<=n*n;d++)if(col==1&&row==1)//矩阵中心的元素{v[loc]=i;i++;}elseswitch(d%4){case 0:for(j=loc;j<loc+col-1;j++,i++)v[j]=i;loc=j;break;case 1:for(j=loc;j<loc+n*(row-1);j+=n,i++)v[j]=i;loc=j;break;case 2:for(j=loc;j>loc-col+1;j--,i++)v[j]=i;loc=j;col-=2;break;case 3:for(j=loc;j>loc-n*(row-1);j-=n,i++)v[j]=i;loc=j+n+1;row-=2;break;}for(int i=0;i<n;i++){for(int j=0;j<n;j++)printf("%-4d ",v[i*n+j]);//有-表示左对齐输出,如省略表示右对齐输出;0:有0表示指定空位填0,如省略表示指定空位不填;m.n:m指域宽,即对应的输出项在输出设备上所占的字符数。n指精度。用于说明输出的实型数的小数位数。为指定n时,隐含的精度为n=6位。putchar('\n');}printf("\n请输入矩阵的阶数(小于0则退出):\n");scanf("%d",&n);}}


法二只是边界条件变了,这样就不用单独判断矩阵中心元素了

边界条件的基本思想如下:


#include<stdio.h>#include<vector>int main(){printf("请输入矩阵的阶数(小于0则退出):\n");int n;scanf("%d",&n);while(n>0){std::vector<int>v(n*n);//d=0:right;d=1:down;d=2:left;d=3:upfor(int col=n,row=n,i=1,loc=0,d=0,j;i<=n*n;d++)switch(d%4){case 0:for(j=loc;j<loc+col;j++,i++)v[j]=i;loc=j-1;break;case 1:for(j=loc+n;j<loc+n*row;j+=n,i++)v[j]=i;loc=j-n;break;case 2:for(j=loc-1;j>loc-col;j--,i++)v[j]=i;loc=j+1;col-=2;break;case 3:for(j=loc-n;j>loc-n*(row-1);j-=n,i++)v[j]=i;loc=j+n+1;row-=2;break;}for(int i=0;i<n;i++){for(int j=0;j<n;j++)printf("%-4d ",v[i*n+j]);putchar('\n');}printf("\n请输入矩阵的阶数(小于0则退出):\n");scanf("%d",&n);}}








原创粉丝点击