查网站域名备案查询系统,井陉网站建设,wordpress 获得文章的类别,网页分析报告案例小伙伴们大家好#xff0c;好几天没更新了#xff0c;主要有个比赛。从今天起继续给大家更新#xff0c;今天给大家带来一种新的题型#xff1a;矩阵特殊打印方式。 
螺旋打印矩阵 
解题思路 首先给大家看一下什么是螺旋方式打印#xff1a; 就像这样一直转圈圈。 我想大多…  小伙伴们大家好好几天没更新了主要有个比赛。从今天起继续给大家更新今天给大家带来一种新的题型矩阵特殊打印方式。 
螺旋打印矩阵 
解题思路 首先给大家看一下什么是螺旋方式打印 就像这样一直转圈圈。 我想大多数小伙们们看到这道题目肯定会考虑打印时什么情况往下走什么时候往左走什么时候往右走什么时候往上走以及走到哪。当然这种方法可以作出此题目但太麻烦了且耗费时间长。 这里我给出大家一种好办法 开始时标记矩阵左上角和右下角将外圈打印完第一行第5列第3行第1列。然后将左上角位置横纵坐标均加一右下角横纵坐标均减一。再次打印新的外圈。直到左上角和右下角错位代表均打印完毕。 
代码分析 
#includeiostream
using namespace std;
int arr[10][10];
void printinfo(int startx,int starty,int endx,int endy){//同行 if(startxendx){for(int istarty;iendy;i){coutarr[startx][i] ;}return;}//同列if(startyendy){for(int istartx;iendx;i){coutarr[i][starty] ;}return;} //一般情况 for(int istarty;iendy;i){coutarr[startx][i] ;} for(int istartx1;iendx;i){coutarr[i][endy] ;} for(int iendy-1;istarty;i--){coutarr[endx][i] ;} for(int iendx-1;istartx1;i--){coutarr[i][starty] ;} 
}
int main(){int n,m;cinnm;for(int i0;in;i){for(int j0;jm;j){cinarr[i][j];}}int startx0,starty0,endxn-1,endym-1;while(startxendxstartyendy){printinfo(startx,starty,endx,endy);startx;starty;endx--;endy--;}
} 大家要注意左上角元素和右下角元素可能处于同行或者同列。打印时注意不要重复打印 
正方形顺时针旋转90度后打印  
解题思路 这道题目我想大家都知道什么意思就是将矩阵往右翻个再打印。 翻转后1号元素来到3号元素位置。2号元素来到6号元素位置。3号元素来到9号元素位置...... 
如果我们将正方形分为两组分别是1、3、9、7     2、6、8、4。我们每一次循环对每一组的位置进行交换那么当我们完成对每一组的交换后最外圈就旋转了90度此时我们再将左上角和右下角分别向右下和坐上移动让新的外圈选择90度当左上角位置和右上角位置重合时即代表结束。 我们考虑一般情况正方形规模为n*n那么我们需要分为n-1组每一圈。对于第i组i从0开始编号其左上角位置为startxstarty右下角位置为endxendy。第一个元素其位置为arr【startx】【startyi】第二个元素位置为arr【startxi】【endy】第三个元素位置为arr【endx】【endy-i】第四个元素位置为arr【endx-i】【starty】。对于每一组均交换四个位置元素值完成每一圈。然后左上角和右下角位置分别往右下角和左上角移动重复操作。知道startxendx因为是正方形横纵坐标相同。 
代码分析 
#includeiostream
using namespace std;
int arr[10][10]; 
void printinfo(int startx,int starty,int endx,int endy){//组别 int sizeendy-starty;for(int i0;isize;i){//第i组第一个   arr[startx][startyi];//第i组第二个   arr[startxi][endy];//第i组第三个   arr[endx][endy-i];//第i组第四个   arr[endx-i][starty] //交换四个位置元素即可int temp;temparr[startx][startyi];arr[startx][startyi]arr[endx-i][starty];arr[endx-i][starty]arr[endx][endy-i];arr[endx][endy-i]arr[startxi][endy];arr[startxi][endy]temp;}for(int i0;i4;i){for(int j0;j4;j){coutarr[i][j] ;}coutendl;}coutendl;
}
int main(){int n,m;cinnm;for(int i0;in;i){for(int j0;jm;j){cinarr[i][j];}}coutendl;int startx0,starty0,endxn-1,endym-1;while(startxendx){printinfo(startx,starty,endx,endy);startx;starty;endx--;endy--;}
} 
zigzag打印矩阵  解题思路 打印方式如上图所示。这道题我们依然使用两个位置初始时均位于左上角 。但某种次序打印位于二者之间的元素。然后一个位置往右走一个位置往左走再按相反的次序打印位于二者联系之间的元素。当向右走的位置无法向右走时就向下走当向下走的位置无法向下走时就向右走。当两者无论如何怎么走都会越界时代表结束此时二者均在右下角。打印次序的确定我们可以使用标志变量确定。 
代码分析 
#includeiostream
using namespace std;
int arr[10][10]; 
void printinfo(int a,int b,int c,int d,int flag){//左下往右上 int i,j;if(flag0){ia;jb;while(icjd){coutarr[i][j] ;i--;j;}}//右上向左下 else{ic;jd;while(iajb){coutarr[i][j] ;i;j--;}}
}
int main(){int n,m;cinnm;for(int i0;in;i){for(int j0;jm;j){cinarr[i][j];}}coutendl;int a,b,c,d;abcd0;int flag1;while(anbmcndm){printinfo(a,b,c,d,flag);if(an-1){a;}else{b;}if(dm-1){d;}else{c;}flag-flag;}
} 本期代码分析结束主要是告诉大家遇见特殊矩阵打印方式时大家能够从整体分析而步局限于局部。多多点赞支持一下吧