PL/SQL综合应用
A、形状
5个1*1的方块,每块方块必须与至少一个方块的一条边完全重合,如此,我们可以连出很多不同的形状(SHAPE)。例如
■
■
■ ■ ■
B、形状的旋转和镜像
但我们很容易可以看出,有些形状在经过旋转(Rotate)和镜像翻转(Mirror)后,可以得到同一个形状,例如如下四个形状,其实都是由一个形状经过若干次旋转或镜像得到的
■
■
■ ■ ■
■ ■ ■
■
■
■ ■ ■
■
■
■
■
■ ■ ■
C、区域和形状值
我们将一块5*5的区域进行编号:
然后我们将每个形状分别放在这个区域中,尽可能的靠左上角放置,所占据的格子的编号加起来,都能得到一个值,称为该形状的形状值(SHAPE_VAL)。例如
■ ■ ■
■
■
的形状值为1+2+3+8+13=27。
D、形状的排序
形状在排序时,分为正序和逆序两种:
若是正序排列,则按形状值(SHAPE_VAL)从小到大排序,SHAPE_VAL相同的,按SHAPE占据的最小格子编号从小到大排序,最小格子编号相同的,按次小格子编号从小到大排序,以此类推。
若是倒序排列,则按形状值(SHAPE_VAL)从大到小排序,SHAPE_VAL相同的,按SHAPE占据的最大格子编号从大到小排序,最大格子编号相同的,按次大格子编号从大到小排序,以此类推。
E、基准形状
如果某形状的这个值是最小的,那么该形状我们就称为是这一系列形状的基准形状(BASESHAPE),其形状值就称为基准形状值(BASESHAPE_VAL)。如果某一系列形状有多个形状的形状值都相同且为最小,则这些形状按正序排列,取其中排列第一的形状为基准形状。
显然,在我们上面举例同一系列的形状中,
■ ■ ■
■
■
是基准形状,其基准形状值为1+2+3+6+11=23。
F、形状的输出
需要完整显示C中所示区域,形状占据的格子用■表示,其余格子用□表示,例如
■ ■ ■ □ □
■ □ □ □ □
■ □ □ □ □
□ □ □ □ □
□ □ □ □ □
问题:
Q1:输出所有的形状和形状值,按正序排序,输出范例(列标题的文字和顺序需与示例保持一致):
Q2:输出所有的基准形状、基于该基准形状的不同形状的数量(包括该基准形状在内)以及基准形状值,按正序排序,输出格式范例(列标题的文字和顺序需与示例保持一致):
代码要求
1.源代码请全部写到一个package中,package名为FIVESQUARESHAPE,Q1用procedure output_allshapes输出,Q2用procedure output_allbaseshapes输出;包头声明统一为:CREATE OR REPLACE PACKAGE FIVESQUARESHAPE AS....
包体声明统一为: CREATE OR REPLACE PACKAGE BODY FIVESQUARESHAPE AS....
2.数据库版本限定在Oracle 9i R2~11g R2,你需要保证你的package部署到你指定的版本的任何一个数据库上,都能正确的运行出结果;
3.包中可以加入其他自定义的过程、函数、类型等等,可以使用SQL语句。
4.结果需要输出到屏幕上,而不是打印到文件里;




