zigzag数组的生成
来源:互联网 发布:淘宝毛线宝宝鞋 编辑:程序博客网 时间:2024/05/21 06:24
zigzag数组如下:
0 1 5 6 14
2 4 7 13 15
3 8 12 16 21
9 11 17 20 22
10 18 19 23 24
即:“之”字型的顺序,
分析思路:第i行第j列元素前面(对角线方式看:看左对角线上面的元素)经历了多少个元素。
例如:
0 1 5 6
2 4 7
3 8
9
其中8号元素(i=2,j=1)经历了一个3行递增的元素,和6 7元素。
于是总结归纳得到如下程序:
#include <stdio.h>#include <stdlib.h>int main(int agrc,char* agrv[]){int n;int i;int j;int** pArray;while (scanf("%d",&n) == 1){pArray = (int **)malloc(n * sizeof(void *));for( i = 0; i < n; i++){pArray[i] = (int *)malloc(sizeof(int)*n);}// 找到值域位置的关系,基本思路求在第i行j列时候,// 这个值前面经历了多少个元素// 时间复杂度为O(n^2)for( i = 0; i < n ; ++i){for(j = 0; j < n; ++j){if(i + j < n){//奇数行if((i+j)%2 != 0) pArray[i][j] = (1+i+j)*(i+j)/2 + i;elsepArray[i][j] = (1+i+j)*(i+j)/2 + j;}else{//偶数行if((i+j)%2 == 0)pArray[i][j] = (1+n)*n/2 + (3*n -1 -i - j)*(i+j-n)/2 + n - i -1;// Or int s = (n-1-j)+(n-i-1);// pArray[i][j] = n*n - (s+1)*s/2 - (n - i -1)elsepArray[i][j] = (1+n)*n/2 + (3*n -1 -i - j)*(i+j-n)/2 + n - j -1;}}}for( int i = 0; i < n ; ++i){printf("\n");for(j = 0; j < n; ++j){printf("%4d",pArray[i][j]);}}printf("\n");}free(pArray);return 0;}
- zigzag数组的生成
- Zigzag数组的初始化
- n*n的ZigZag数组
- n*n的ZigZag数组
- n*n的ZigZag数组
- n*n的ZigZag数组
- n*n的ZigZag数组
- zigzag二维数组的代码
- 生成 zigzag(JPEG编码里取像素数据的排列顺序) 样式的二维数组
- zigzag数组
- zigzag数组
- zigzag数组
- zigzag数组
- zigzag数组
- zigzag数组
- Zigzag数组
- zigzag数组
- zigzag数组
- protocol buffer 的proto文件
- 如何使用java泛型
- 这已经是过去
- 如何创建java泛型
- 从百度文库看企业内部信息泄漏
- zigzag数组的生成
- cactus测试servlet
- 无线照明系统开发过程说明(三)
- telnet bat
- telnet 的bat
- IT系统风险管理体系的构建思路
- Hibernate一对多双向关联
- 点击一个按钮实现在不同对话框之间的切换,帮忙看下这代码能不能这样写,为什么不对呀
- spring aop 复习 .2 切入点