用c++写的,小白一个。
题目如下
从键盘任意输入一个自然数n(n表示矩阵的大小,假设不超过100),请编程输出一个nn的蛇形矩阵。如果输入的n不是自然数或者输入了不合法的数字,则输出"Input error!"。
提示 用两个双重循环分别计算nn矩阵的左上三角和右下三角,设置一个计数器从1开始记录当前要写入矩阵的元素值,每次写完一个计数器加1,在计算左上角和右下角矩阵元素时,分奇数和偶数两种情况考虑待写入的元素在矩阵中的行列下标位置。
这道题的思路如下:
主要是判断是i=0还是j=0;如果是j=0就让i++,如果是i=0就让j++;然后再按照对角线的方向一次的递加1就行了,这是输出上三角形,还有下三角形,主要的思路和这个一样,不过要让i和j都从n-1开始按着n*n递减,也是沿着对角线递减,知道i>1就行
具体输出的实例如下:
#include <iostream>
#define N 10
using namespace std;
**//这个函数的功能就是产生蛇形矩阵。**
void chanshe(int a[][N], int n)
{
**//这是输出上三角**
int c=1,i=0,j=0;
int s;
s=n*n;
a[i][j]=c;
while(j<n&&i<n)//循环结束条件
{
if(i==0)//判断i==0,就让j++;
{
j++;
a[i][j]=++c;
while(j!=0)//按照对角线的顺序输出
{
i++;
j--;
a[i][j]=++c;
}
}
if(j==0)//判断j==0;让i++;
{
i++;
a[i][j]=++c;
while(i!=0)//沿对角线递加
{
j++;
i--;
a[i][j]=++c;
}
}
}
**//这是输出下三角,思路和上面一样**
i=n-1;
j=n-1;
a[i][j]=s;
while(i>1&&j>1)
{
if(i==n-1)
{
j--;
a[i][j]=--s;
while(j!=n-1&&j>0)
{
i--;
j++;
a[i][j]=--s;
}
}
if(j==n-1)
{
i--;
a[i][j]=--s;
while(i!=n-1&&i>0)
{
j--;
i++;
a[i][j]=--s;
}
}
}
}
//这个函数的功能是输出这个二维数组 也就是这个矩阵。
void out(int a[][N],int n)
{
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
printf("%5d",a[i][j]);
}
cout <<endl;
}
}
int main()
{
int a[N][N],n;
cin >> n;
ZigzagMatrix(a,n);
out(a,n);
return 0;
}
大佬勿喷啊,谢谢,小白一个