描述
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
例如,当输入5时,应该输出的三角形为:
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
输入描述:
输入正整数N(N不大于100)
输出描述:
输出一个N行的蛇形矩阵。
示例1
输入:
4复制
输出:
1 3 6 10 2 5 9 4 8 7
图解:
代码:
#include<stdio.h> //以下是Senky的代码 void snake(short str[][100], int N) { //蛇形矩阵 //这就是数字金字塔倒过来输出,再进阶一下 int sum=1;//填入的数值,从1开始 int l=1;//列递增变量 for(int i=0; i<N; i++)//i为行 { int k=2;//行递增变量 //每一行都是从2开始递增,故在换行后重置k for(int j=0; j<N-i; j++)//j为列 { str[i][j]=sum;//填入每行第一个元素,再横向递增 printf("%d ", str[i][j]);//立马输出 sum=sum+i+k;//横向递增,+2、+3、+4..即+2,再2++实现 k++;//所以k初始值为2,再++ } printf("\n");//输出一行就换行 sum=str[i][0]+l;//纵向看,+1、+2、+3.. l++;//所以l初值为1,1再++ } } int main() { int N;//正整数N,也是矩阵维度 short str[100][100];//定义一个short二维数组,用char会溢出,用int太浪费空间 scanf("%d\n", &N);//手动输入N的大小 snake(str,N);//蛇形矩阵,填入的同时输出 return 0;//编辑于2022/09/15 }总结:
①我用的数学方法做的,其实也可以用指针
指针先指向第一行首元素,判断指针上移是否越界,没越界就上移再右移,再printf("%d", sum++);但我觉得数学方法更容易实现;
②唯一要注意的就是行列递增变量的初值和位置,算法思想是怎么来的;
③当前帖子仅供自我精进、学习使用,有不足之处欢迎指正;