①输出如下的蛇形矩阵
1 2 6 7 12
3 5 8 11 13
4 9 10 14 15
#include <stdio.h>
#define right 1
#define ledo 2
#define riup 3
main(void)
{
int m, n, x = 0, y = 0, direct = right ;
printf("请输入行数m和列数n:\n") ;
scanf("%d%d", &m, &n) ;
int a[m][n] ;
for (int i = 1 ; i <= m*n ; i++)
{
a[x][y] = i ;
switch(direct)
{
case right :
y++ ;
direct = ledo ;
break ;
case ledo :
if (y < 1 && x < m-1)
{
x++ ;
direct = riup ;
}
else if (x == m-1)
{
y++ ;
direct = riup ;
}
else
x++, y-- ;
break ;
case riup :
if (x < 1 && y < n-1)
{
y++ ;
direct = ledo ;
}
else if (y == n-1)
{
x++ ;
direct = ledo ;
}
else
x--, y++ ;
break ;
}
}
for (int i = 0 ; i < m ; i++)
{
for (int j = 0 ; j < n ; j++)
printf("%-4d", a[i][j]) ;
printf("\n") ;
}
}
②输出如下所示蛇形矩阵
1 3 6 10
2 5 9 13
4 8 12 15
7 11 14 16
(1)输出为三角形的
1 3 6 10
2 5 9
4 8
7
#include <stdio.h>
main(void)
{
int m, n, k, s = 0 ;
printf("请输入行数m和列数n:\n") ;
scanf("%d%d", &m, &n) ;
int a[m][n] ;
for (int i = 0 ; i < m ; i++)
{
for (int j = 0 ; j < n ; j++)
{
k = i - j ;
if (k >= 0)
a[k][j] = s++ ;
}
}
for (int i = 0 ; i < m ; i++)
{
for (int j = i ; j < (m > n ? n : m) ; j++)
printf("%-4d", a[i][j-i]) ;
printf("\n") ;
}
}
(2)行列数必须相同的
#include <stdio.h>
main(void)
{
int n, x = 0, y = 0, s ;
printf("请输入行列数n:\n") ;
scanf("%d", &n) ;
int a[n][n] ;
for (int i = 1 ; i <= n*n ; i++)
{
a[x][y] = i ;
if (x <1 || y > n-2)
{
if (y > n-2)
s = x, x = y, y = s+1 ;
else
s = x, x = y+1, y = s ;
}
else
x--, y++ ;
}
for (int i = 0 ; i < n ; i++)
{
for (int j = 0 ; j < n ; j++)
printf("%-4d", a[i][j]) ;
printf("\n") ;
}
}
(3)行列数可以不同的
#include <stdio.h>
#define riup 1
#define reset 2
main(void)
{
int m, n, x = 0, y = 0, s = 1, direct = riup ;
printf("请输入行数m和列数n:\n") ;
scanf("%d%d", &m, &n) ;
int a[m][n] ;
for (int i = 1 ; i <= m*n ; i++)
{
a[x][y] = i ;
switch (direct)
{
case riup :
if (x < 1 || y > n-2)
{
x = s++, y = 0 ;
if (x == m-1)
{
s = 1 ;
direct = reset ;
}
}
else
x--, y++ ;
break ;
case reset :
if (x < 1 || y > n-2)
{
x = m-1, y = s++ ;
}
else
x--, y++ ;
break ;
}
}
for (int i = 0 ; i < m ; i++)
{
for (int j = 0 ; j < n ; j++)
printf("%-4d", a[i][j]) ;
printf("\n") ;
}
}