zigzag数组
来源:互联网 发布:制作壁纸的软件 编辑:程序博客网 时间:2024/05/17 20:29
#include"stdafx.h"#include<iostream>using namespace std;int main(){int n;cin>>n;int s,i,j;int squa;int ** a = (int**)malloc(sizeof(int*)*n);if(a == NULL){return 0;}for(i = 0; i < n; i++){a[i] = (int*)malloc(sizeof(int)*n);if(a[i] == NULL){i--;while(i >= 0){free(a[i]);}free(a);return 0;}}squa = n * n;for(i = 0; i < n; i++){for(j = 0; j < n; j++){s = i + j;if(s < n){a[i][j] = s*(s+1)/2 + ((s % 2 != 0) ? i : j);}else{s = (n - 1 - i) + (n - 1 - j);a[i][j] = squa - s*(s+1)/2 - (n - (( (i + j)%2 != 0) ? i : j));}}}for(i = 0; i < n; i++){for(j = 0; j < n; j++){cout<<a[i][j]<<" ";}cout<<endl;}}由于对同一斜线上的元素,s=i+j为常数
1.对于第n个(n<N)斜线:
每一斜线个数比上一行多一个,则每一斜线的第一个值表示了在该斜线之前元素的个数,即一个累加 :
(s+1)*s/2
斜线中的任意元素可表示为s*(s+1)/2+i
2.同理对于第n个(n>=N)的斜线:
每斜线的元素个数开始减少,等差数组不适用,为方便起见,可以用减法计算元素个数,
剩余元素的斜线数目:s1=(2(N-1)-(i+j))
元素值=(N*N-(s1+1)*s1/2)-(N-i)=下一斜线的第一个元素值-该斜线剩余元素的个数
0 0
- zigzag数组
- zigzag数组
- zigzag数组
- zigzag数组
- zigzag数组
- zigzag数组
- Zigzag数组
- zigzag数组
- zigzag数组
- zigzag数组
- zigzag数组的生成
- 求Zigzag数组
- 求zigzag数组矩阵
- 打印zigzag数组
- Zigzag数组的初始化
- zigzag数组和螺旋数组
- n*n的ZigZag数组
- n*n的ZigZag数组
- 慢下来的时光
- 黑马程序员--Java基础加强--07枚举、反射、注释
- C# 中的委托和事件(一)
- Essential skills any web developer should have
- Spring注入方式四:通过扫描类路径来把类对象注入Spring容器
- zigzag数组
- 跟JBPM学设计模式之组合模式
- html meta标签的组成
- 本地生活O2O商机的平台战略分析
- openSUSE搜狗拼音输入法
- ORACLE 通过日期变量判断是否闰年
- “定位营销”这东西真那么靠谱吗?
- HDU 2602 Bone Collector(01背包)
- HTML中meta作用介绍