zigzag数组,螺旋数组生成
zigzag数组
#include "stdio.h"
#include "stdlib.h"
int GetNum(int i,int j, int N, const int* sum);
void SUM(int N, int* sum);
/*
打印zigzag数组
0 1 5 6 14 15 27 28 44 45 65 66 90
2 4 7 13 16 26 29 43 46 64 67 89 91
3 8 12 17 25 30 42 47 63 68 88 92 113
9 11 18 24 31 41 48 62 69 87 93 112 114
10 19 23 32 40 49 61 70 86 94 111 115 132
20 22 33 39 50 60 71 85 95 110 116 131 133
21 34 38 51 59 72 84 96 109 117 130 134 147
35 37 52 58 73 83 97 108 118 129 135 146 148
36 53 57 74 82 98 107 119 128 136 145 149 158
54 56 75 81 99 106 120 127 137 144 150 157 159
55 76 80 100 105 121 126 138 143 151 156 160 165
77 79 101 104 122 125 139 142 152 155 161 164 166
78 102 103 123 124 140 141 153 154 162 163 167 168
*/
int main()
{
int N;
scanf("%d", &N);
int **a = (int **)malloc(N*sizeof(int));
for(int i=0; i < N; i++)
{
a[i] = (int *) malloc(N*sizeof(int));
}
int *sum = (int *)malloc((2*N-1)*sizeof(int));
SUM(N, sum);
for(int i=0; i<N; i++)
{
for(int j=0; j<N; j++)
{
a[i][j] = GetNum(i, j, N, sum);
}
}
for(int i=0; i<N; i++)
{
for(int j=0; j<N; j++)
{
printf("%4d", a[i][j]);
}
printf("\n");
}
system("pause");
}
int GetNum(int i,int j, int N, const int* sum)
{
int lev=i+j;
if((i+j)<N)
{
if((i+j)%2==0)
{
return sum[i+j] - i;
}
else
{
return sum[i+j]-j;
}
}
else
{
if((i+j)%2==0)
{
return sum[i+j] -(N-1-j);
}
else
{
return sum[i+j]-(N-1-i);
}
}
}
void SUM(int N, int* sum)
{
sum[0]=0;
for(int i=1; i<=2*N-1; i++)
{
if(i<N)
{
sum[i] = sum[i-1]+i+1;
}
else
{
sum[i]= sum[i-1]+2*N-i-1;
}
}
}
螺旋数组
/*
打印螺旋数组
111 112 113 114 115 116 117 118 119 120 121
110 73 74 75 76 77 78 79 80 81 82
109 72 43 44 45 46 47 48 49 50 83
108 71 42 21 22 23 24 25 26 51 84
107 70 41 20 7 8 9 10 27 52 85
106 69 40 19 6 1 2 11 28 53 86
105 68 39 18 5 4 3 12 29 54 87
104 67 38 17 16 15 14 13 30 55 88
103 66 37 36 35 34 33 32 31 56 89
102 65 64 63 62 61 60 59 58 57 90
101 100 99 98 97 96 95 94 93 92 91
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAX(X,Y) (X)>=(Y)?(X):(Y);
int foo(int ,int);
int main()
{
int n;
scanf("%d", &n);
for(int j=n; j>=-1*n; j--)
{
for(int i=-1*n; i<=n;i++)
{
printf("%4d", foo(i, j));
}
printf("\n");
}
system("pause");
}
int foo(int x,int y)
{
int l=MAX(abs(x), abs(y));
int max=(2*l-1)*(2*l-1);
if(x==y && x==0)
{
return 1;
}
if(x==y && x==l)
{
return max+8*(l);
}
if(x==l)
{
return max +(l-y);
}
else if(y==-1*l)
{
return max +2*l+(l-x);
}
else if(x==-1*l)
{
return max +6*l -(l-y);
}
else
{
return max+8*(l) - (l-x);
}
}
posted on 2011-09-19 17:44 Lovell Liu 阅读(2086) 评论(0) 编辑 收藏 举报