打印Sierpinski-Triangle

时间:2017-10-19 11:28:29

标签: oracle plsql oracle11g

任务要求编写打印Sierpinski三角形的程序。 期望的结果如下所示:

#
##
# #
####
#   #
##  ##
# # # #
########
#       #
##      ##
# #     # #
####    ####
#   #   #   #
##  ##  ##  ##
# # # # # # # #
################
#               #
##              ##
# #             # #
####            ####
#   #           #   #
##  ##          ##  ##
# # # #         # # # #
########        ########
#       #       #       #
##      ##      ##      ##
# #     # #     # #     # #
####    ####    ####    ####
#   #   #   #   #   #   #   #
##  ##  ##  ##  ##  ##  ##  ##
# # # # # # # # # # # # # # # #
################################

这就是我的尝试:

declare
v_str varchar2(10) := '#';
n NUMBER := 4;
begin
   for i in 1..n loop
      v_str := rpad(v_str, i, '#');
      for l in 1..8 loop
      v_str := rpad(v_str, l, v_str);
      dbms_output.put_line(v_str);
      end loop;
   end loop;
end;

如你所见,我没有得到预期的结果,我想要的。问题是我不知道在三角形内制作空格。我的想法是创建一个变量,其中包含:

#
##
# #
####

然后把它放在1..8循环中。我在编写代码时遇到了一些麻烦。有什么建议/提示吗?谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用this code

执行此操作
DECLARE
  n PLS_INTEGER := 4;
BEGIN
  FOR line IN REVERSE 0 .. POWER( 2, n ) - 1 LOOP
    FOR col IN 0 .. POWER( 2, n ) - 1 LOOP
      IF BITAND( line, col ) = 0 THEN
        DBMS_OUTPUT.PUT( '#' );
      ELSE
        DBMS_OUTPUT.PUT( ' ' );
      END IF;
    END LOOP;
    DBMS_OUTPUT.NEW_LINE;
  END LOOP;
END;
/