Pascal语言中二维数组:矩阵问题

【题目】方阵填数:在一个 N*N的方阵中,填入 1,2..... N*N个数,并要求构成如下格式:

图例:10 11 12  1

9  16 13  2

8  15 14  3

7   6   5   4

【上手】观察图例,不难看出这是一个螺旋矩阵,下面是色彩渐变版大图,纯手工制作(有木有2048的赶脚):

【核心代码】

 1 //变量赋初值
 2 x:=0;//横坐标
 3 y:=0;//纵坐标
 4 i:=0;//要填入的数字
 5 k:=n;//每一轮需要填的方格数
 6 j:=1;//填数的方向,1时为从上到下↓或从左到右→,-1时相反
 7 //开始填数
 8 while i<n*n do
 9 begin
10 for i:=i+1 to i+k do//纵向↑ ↓填数
11 x:x+j;
12 a[x,y]:=i;
13 end;//结束 for 循环
14 dec(k);//即 k:=k-1,每完成一个纵行填数后执行,下一行需要填的方格数-1
15 if j=1 then j:=-1else j:=1;//控制方向,这一次是从上到下或从左到右下一次就是从下到上或从右到左
16 for i:=i+1 to i+k do//横向← →填数
17 begin
18 y:=y+j;
19 a[x,y]:=i;
20 end;
21 end;//结束 while 循环
时间: 2024-10-29 19:10:13

Pascal语言中二维数组:矩阵问题的相关文章

关于C语言中二维数组传参————————【Badboy】

直接上代码: #include void Fun(int *a[],int m,int n)// { printf("%d\t",*a);//[0][0] /* int e[2][2][2]={8,7,6,5,4,3,2,1}; int *f,***g; g=e; f=e;//有警告,但不会报错 printf("%d\n",*f); */ } /*解释: Fun()中的int *a[2]表示定义指针数组a[2],a[0],a[1]存储的都是指针, a表示的是数组的首

C语言中二维数组如何申请动态分配内存

C语言中二维数组如何申请动态分配内存: 使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小 #include <stdio.h> #include <malloc.h> int main() { int **a; int i, j; a = (int**)malloc(sizeof(int*)*3);//为二维数组分配3行 for (i = 0; i < 3; ++i){//为每列分配4个大小空间 a[i] = (int*)malloc(sizeof(int

c语言中二维数组作函数参数以及二维数组的理解

当二维数组作函数参数接受主调函数中的二维数组时,退化为一个指向数组的指针. 在此引用<c与指针>中的观点:作为函数 参数的多位数组名的穿递方式和一维数组名相同--实际传递的是个指向数组第一个元素的指针.但是,两者之间的区别在于, 多维数组的每个元素本身是另外一个数组,编译器需要知道它的维数,以便为函数形参的下标表达式进行求值.

关于C语言中二维数组的P+1与*(P+1)个人浅见

本人第一次在51CTO上发表博客,可能会有一些错误,希望各位大神多多指点!好了,闲言少续,我们进入主题:     在C语言中,有很多数据类型(Int.Float.Char...),那么数组是一种构造类型的数据,个人认为数组是一组具有相同数据类型的数据集合.目前,我们常见的数组为一维.二维的数组. 本文以二维数组为题,首先,我们看一段代码 !     通过代码,我们知道*(P+1),P+1的值是相同的,但含义不同,先说P+1,无论是一维还是二维数组,数组名都可表两层含义:1.指向其起始元素(a[0

C语言二维数组作为函数的参数

前言:今天在实现装配线调度程序时候,用到了二维数组,并将其作为函数的参数.在写程序的时候,遇到一些问题,即二维数组做函数的参数应该如何正确表示.我写程序的错误如下程序所示: #include <cstdio> void print(int *a[3]) { printf("%d\n",a[0][0]); } int main() { int a[2][3] = {1,2,3,4,5,6}; print(a); return 0; } 编译程序时候,在第10行提示错误信息:|

C语言 二维数组与指针笔记

今天分析了C语言二维数组和指针的基本理解,感觉有点懵...代码记录一下,如果有大神临幸发现哪里有误,欢迎指正~~~ #include <stdio.h> #include <stdlib.h> #include <string.h> //void func(int p[][]) //这样写等同于void func(int **p) p++移动了四个字节,(*p)++移动了四个字节,不符合二维数组规律 //{ //} //列优先输出的函数(即竖着输出) void func

C++中二维数组的动态分配

作者:   来源:csdn博客   公布者:admin 时间:2009-04-23 13:55:03   点击:115 C++中一维数组的动态分配十分经常使用,但C++刚開始学习的人可能非常少想过要使用动态分配的二维数组,或者自觉得二维数组就是这样分配的(至少我自己開始的时候就这样觉得):int m=2, n=3; int** array2D=new int[m][n];.这全然是我们写多了像int n=4; int* array=new int[n];这种语句留下的后遗症,纯粹是由于惯性太大刹

C语言--二维数组,字符串数组,多维数组

#import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { // int a[2][3]={ // {1,2,3}, // {4,5,6} // }; // int a[2][3]={1,2,3,4,5,6}; // //打印单个元素 // printf("%d",a[1][1]); // //元素没赋全,默认为0 // int b[2][3]={{1,2,3},{4}}; // /

c语言二维数组传递

c语言二维数组传递,目前我总结三种方法,以及纠正一个不能使用的方法 /********************************* * 方法1: 第一维的长度可以不指定 * * 但必须指定第二维的长度 * *********************************/ void fun(int a[][3], int n, int m) { int i, j; for (i = 0; i < n; i++) { for (j = 0; j < m; j++) printf(&quo