打印蛇形矩阵
来源:互联网 发布:windows 98下载 编辑:程序博客网 时间:2024/06/05 11:39
题目说明
蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形。
样例输入
5
样例输出
1 3 6 10 15
2 5 9 14
4 8 13
7 12
11
接口说明
原型
void GetResult(int Num, int* pResult);
输入参数:
int Num:输入的正整数N
输出参数:
int * pResult:指向存放蛇形矩阵的整形指针
指针指向的内存区域保证有效
返回值:
void
分析:对于样例输入5,我们可以得到如下的一个结果A:
假设形式B中的序号从1开始,i表示行,j表示列,i,j∈{1,2,3,…,n};构成的是以一个n*n的二维矩阵。从图中的箭头方向可以看出只要求出某一个格子左下角的数就可以求出当前数。假如当前值为B[i][j],如下图:
如果要求B[i][j],只要知道B[i+1][j-1]就可以了。但是当j=1时,B[i][1]的值就是前i-1条负对角线上数字的个数-1,可以使用求和公式,所以得出如下递推公式:
对于程序流程来说,我们要先计算矩阵第一列的值,然后使用循环就可以得到所有的值。
代码如下:
#include <stdio.h> #include <stdlib.h> #include <iostream>using namespace std;int main() { int n,i,j; while(cin >> n){ if(n>100 || n<1) return 0; if (n == 1){ printf("1\n"); return 0; } int *arr = new int[n*n]; //对矩阵的第一列进行赋值 for ( i=0; i<n; i++){ arr[i*n+0] = i*(i+1)/2 + 1; } //然后对除第一列以外的单元格进行赋值,列优先 //arr[i][j] = a[i+1][j-1] + 1; for ( j=1; j<n; j++){ for ( i=0; i+j < n; i++){ //arr[i][j] = a[i+1][j-1] + 1; arr[i*n + j] = arr[(i+1)*n + (j-1)] + 1; } } for ( i=0; i<n; i++){ for ( j=0; j+i <n-1; j++){ printf("%d ",arr[i*n+j]); } printf("%d",arr[i*n+j]); printf("\n"); } delete []arr; } //system("pause"); return 0; }
0 0
- C++ 打印蛇形矩阵
- Java打印蛇形矩阵
- 打印输出蛇形矩阵
- 打印蛇形矩阵
- 打印蛇形矩阵
- 打印蛇形矩阵-题解
- [腾讯]打印蛇形矩阵
- 打印蛇形矩阵
- 打印蛇形矩阵
- 打印蛇形矩阵
- 打印蛇形矩阵
- 蛇形打印矩阵
- 打印蛇形矩阵
- 打印蛇形矩阵
- 打印蛇形矩阵
- 20.蛇形矩阵打印
- 不用数组打印蛇形矩阵
- (C#)打印蛇形正方形矩阵
- VS2013安装问题
- 告诉你一个真实的 OpenStack:都谁在用,用来干什么?
- ListView--内容不显示
- POJ 2823 Sliding Window <速度特快 单调队列>
- 图的最短路径问题
- 打印蛇形矩阵
- ListView中嵌入button,点击监听无响应的解决方案
- Git Commit前取消add 操作(利用git reset操作)
- 微软面试100题系列---判断整数序列是否为二叉查找树的后序遍历
- MFC ShowLog(CString strLog)
- C语言_统计本件中各长度字符串出现的次数
- Linux 下编译安装软件,找不到共享库 xx.so 的解决办法
- Effective Modern C++ 条款26 避免对通用引用进行重载
- 仿实例开发----一个简单的视频播放器