概述
/*
思路:
(1)蛇形矩阵有一个比较大的特点,就是它的增加是对角线的增加,而对角线有一个特点就是行列之和是不变的,而且对对角线的遍历有一种方法,叫做行遍历法
(2)行遍历法的原理(名字自己编的)
即将对角线映射到row,让这两个形成关系,然后通过将col当做计数器来遍历
【1】上三角形:(col + row(检索) = row(原来))
有两种读法:
从对角线的上方读:
col = row;
while(col >= 0)
{
a[row - col][col]
col --;
}
从对角线下方读的方法:
col = 0;
while(col <= row)
{
a[row - col][col]
col --;
}
实际上只是col的初始值不一样而已
【2】下三角形(col(检索) + row(检索) = n - 1 + row(对映)(观察)
有两种读法:
从对角线的上方读:
col = n - 1;
while(col >= row)
{
a[n - 1 + row - col][col]
col --;
}
从对角线的下方读:
col = row;
while(col <= n - 1)
{
a[n - 1 + row - col][col];
col ++;
}
(3)经过观察,蛇形矩阵的赋值其实是将两种读法相结合,于是就有判断奇偶的判断
代码:
*/
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
while(1)
{
int n ;
cout << "请输入该蛇形矩阵的阶数" <<endl;
cin >> n;
if(n <= 0)
break;
int count = 1 , a[n][n];
int row , col;
for(row = 0; row < n;row ++)
{
if(row % 2 != 0)
{
col = row;
while(col >= 0)
{
a[row - col][col] = count;
count ++;
col --;
}
}
else
{
col = 0;
while(col <= row)
{
a[row - col][col] = count;
count ++;
col ++;
}
}
}
for(row = 1;row <= n;row ++)
{
if(row % 2 == 0)
{
col = n - 1;
while(col >= row)
{
a[n - 1 + row - col][col] = count;
count ++;
col --;
}
}
else
{
col = row;
while(col <= n - 1)
{
a[n - 1 + row - col][col] = count ;
count ++;
col ++;
}
}
}
for(int i = 0;i < n;i ++)
{
for(int j = 0;j < n ; j++)
{
cout <<left << setw(4) << a[i][j];
}
cout << endl;
}
}
return 0;
}
最后
以上就是饱满麦片为你收集整理的蛇形矩阵的全部内容,希望文章能够帮你解决蛇形矩阵所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复