本帖最后由 plp626 于 2011-8-17 22:34 编辑
看楼上代码得到的蛇形方阵数学关系式为
设c表示阶数,a(i,j)表示第i行第j列的数字,并记d=i+j-1,则有公式:- 当i+j-2<c 时: a(i,j)=(d*d-d)/2+j+rem(i+j,2)*(i-j)
- 当i+j-2>=c时: a(i,j)=(d*d-d)/2+j+rem(i+j,2)*(i-j)-(d-c)*(d-c)
复制代码 其中,rem(x,y)表示x除以y的余数;
进而寒夜版主的代码可精简为:- @echo off&set/a c=19
- for /l %%i in (1 1 %c%)do echo;&for /l %%j in (1 1 %c%)do (
- set/a i=%%i,j=%%j,d=i+j-1
- set/a "f=(d*d-d)/2+j+(i+j)%%2*(i-j)-!!((d-1)/c)*(d-c)*(d-c)+1000"
- call set/p=%%f:~-3%% <nul
- )
- pause>nul
复制代码 19阶的:- 001 002 006 007 015 016 028 029 045 046 066 067 091 092 120 121 153 154 190
- 003 005 008 014 017 027 030 044 047 065 068 090 093 119 122 152 155 189 191
- 004 009 013 018 026 031 043 048 064 069 089 094 118 123 151 156 188 192 225
- 010 012 019 025 032 042 049 063 070 088 095 117 124 150 157 187 193 224 226
- 011 020 024 033 041 050 062 071 087 096 116 125 149 158 186 194 223 227 256
- 021 023 034 040 051 061 072 086 097 115 126 148 159 185 195 222 228 255 257
- 022 035 039 052 060 073 085 098 114 127 147 160 184 196 221 229 254 258 283
- 036 038 053 059 074 084 099 113 128 146 161 183 197 220 230 253 259 282 284
- 037 054 058 075 083 100 112 129 145 162 182 198 219 231 252 260 281 285 306
- 055 057 076 082 101 111 130 144 163 181 199 218 232 251 261 280 286 305 307
- 056 077 081 102 110 131 143 164 180 200 217 233 250 262 279 287 304 308 325
- 078 080 103 109 132 142 165 179 201 216 234 249 263 278 288 303 309 324 326
- 079 104 108 133 141 166 178 202 215 235 248 264 277 289 302 310 323 327 340
- 105 107 134 140 167 177 203 214 236 247 265 276 290 301 311 322 328 339 341
- 106 135 139 168 176 204 213 237 246 266 275 291 300 312 321 329 338 342 351
- 136 138 169 175 205 212 238 245 267 274 292 299 313 320 330 337 343 350 352
- 137 170 174 206 211 239 244 268 273 293 298 314 319 331 336 344 349 353 358
- 171 173 207 210 240 243 269 272 294 297 315 318 332 335 345 348 354 357 359
- 172 208 209 241 242 270 271 295 296 316 317 333 334 346 347 355 356 360 361
复制代码
|