蛇行矩阵的百度百科

2020-05-04 15:59

寒夜孤星蛇形矩阵的二阶等差算法

(以批处理为例):

将整个图形以对角线斜线分割,只看左半部分。

提取每条斜线里最小的数字,分别是 1 2 4 7 11 16 22 29 37 ... 。这个二阶等差数列可以用 (n-1)*n/2+1 计算。批处理即 (%%a+%%b-1-1)*(%%b-1+%%a)/2+1 。

我们提取每条斜线里最大的数字,分别是 1 3 6 10 15 21 28 36 45 ... 。这个二阶等差数列可以用 (n+1)*n/2 计算。批处理即 (%%a+%%b-1+1)*(%%b-1+%%a)/2 。

通过 e=(%%a+%%b)%%2 确定斜线奇偶性。

通过 (%%a+%%b-1-c)*(%%a+%%b-1-c) 修正右半部分的数值。 使用 !!((%%a+%%b-1)/(c+1)) 定位这些右半部分斜线。 综合后得到批处理代码: @echo off&set c=9

for /l %%a in (1 1 %c%) do ( for /l %%b in (1 1 %c%) do set/a

\!!(d/(c+1))*(d-c)*(d-c)\ echo; )

pause

以上算法最大特征是通过坐标%%a、%%b和阶数c直接运算出该点的数值。

编辑本段PASCAL语言蛇形矩阵生成代码

Program she; const max=10; var d,i,j,m,N:integer; A:array [1..10,1..10] of integer;

begin write('N=');readln(N); if (N>=1) and (N<=max) then begin i:=1;j:=1;m:=1;d:=1; repeat A[i,j]:=m; {填数} case d of

1: begin i:=i+1; if j=1 then d:=2 else d:=4; end; 2: begin i:=i-1;j:=j+1;

if j=N then d:=1 else if i=1 then d:=3;end;

3: begin j:=j+1; if i=N then d:=2 else d:=4;end; 4: begin i:=i+1;j:=j-1;

if i=N then d:=3 else if j=1 then d:=1;end; end; m:=m+1;

until m>N*N;

writeln('OUTPUT:');

for i:=1 to N do begin for j:=1 to N do write(A[i,j]:4); {输出填数} writeln;end;

end

else writeln('Input N error!'); end. C++程序

#include using namespace std; int main(){

//该程序虽然能通过评测系统的检测,但时间复杂度为O(n^3),因而有待改进

int N; //矩阵阶数

int a[11][11]; //N阶矩阵

int count=0; //矩阵元素值,初始为0 cin>>N;

for(int i=1;i<=2*N-1;i++){ //N阶方阵有2*N-1条反对角线,依次遍历之

if(i%2!=0){ //当对角线编号为奇数时,各元素按此对角线上的矩阵各元素下标之和从小到大的顺序排列 for(int j=1;j<=N;j++) for(int k=1;k<=N;k++){

if(j+k==i+1) a[j][k]=++count; //各元素的下标之和==对角线编号+1 } } else{ //当对角线编号为偶数时,各元素按此对角线上的矩阵各元素下标之和从大到小的顺序排列

for(int j=N;j>=1;j--) for(int k=N;k>=1;k--){

if(j+k==i+1) a[j][k]=++count; //各元素的下标之和==对角线编号+1 } } }

for(int i=1;i<=N;i++) for(int j=1;j<=N;j++){ if(j!=N)

cout<

cout<

system(\ return 0; }


蛇行矩阵的百度百科.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:仁爱版八年级英语下册教案:U7T3复习教案 - 图文

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: