暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

PL/SQL

原创 一个坏蛋 2022-08-05
324

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.结果需要输出到屏幕上,而不是打印到文件里;

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论