任务要求编写打印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循环中。我在编写代码时遇到了一些麻烦。有什么建议/提示吗?谢谢!
答案 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;
/