在oracle pl / sql中打印pascal三角形

时间:2014-09-19 08:17:43

标签: oracle stored-procedures plsql oracle11g oracle10g

如何使用' *'打印pascal三角形。在使用Pl / SQL函数的Oracle中,我希望用最少的代码行编写。谁能帮我 ? 这就是我试过的,

begin
for i in 1..5 loop
dbms_output.put_line('');
for j in 1..i loop
dbms_output.put('*');
end loop;
end loop;
end;

我有两个for循环打印三角形的答案,但我试图使用Lpad()和Rpad()函数完成一个for循环。

5 个答案:

答案 0 :(得分:4)

这是一个很好的机会,可以展示当人们不知道如何继续时,如何在逻辑上解决问题。没有人在这里为你做功课,但是我们可以给出一些关于解决问题的建议,然后在我们看到你提出的问题时帮助指导。

从所需的最终结果开始,然后向后工作以找出如何获得所需结果。您对输出的期望是什么?像这样(4行)?:

   *
  * *
 * * *
* * * *

你注意到反复出现的模式吗? "反复发生的模式"表示需要某种循环。也许如果用另一个字符替换前导空格,另一个反复出现的模式将变得明显:

XXX*
XX* *
X* * *
* * * *

因此,在另一种反复出现的模式中反复出现的模式。前导空格数与行中' *的数量之间的关系是什么?取决于行,计算或两个计算的需要可能变得明显。这就是我想要放弃的所有内容,因为作业的目的是让你弄明白。

希望这提供了如何在不给予太多帮助的情况下解决问题的方法。

答案 1 :(得分:1)

首先,我尝试用三个四个循环绘制pascal三角形,它正常工作。这是答案..

Declare
inc number := 4;
BEGIN

FOR Outter IN 1 .. inc LOOP

          FOR Inner IN 1 .. inc - Outter   LOOP
            dbms_output.put(' ');
          END LOOP;

          FOR Inner IN 1 .. Outter   LOOP
            dbms_output.put('*');
          END LOOP;          

    dbms_output.put_line(' ');

END LOOP;

END;

这是PL / SQL中的一个匿名块,我也有一个四个循环的答案,正如我预期的那样正确打印pascal三角形。

DECLARE 
  row_num_ NUMBER := 5; 
BEGIN 
    FOR i IN 0..row_num_ LOOP 
      DBMS_OUTPUT.PUT_LINE(' ' || LPAD(' ', row_num_ - i, ' ') || RPAD('*', 2 * i - 1, '*')); 
    END LOOP;  
END;

感谢各位朋友的大力支持..

答案 2 :(得分:0)

Declare
n number;
BEGIN
n:=&n;
FOR i IN 1 .. n LOOP


      FOR j IN 1 .. i   LOOP
        dbms_output.put('* ');
      END LOOP;          

    dbms_output.put_line(' ');

END LOOP;

END;

答案 3 :(得分:0)

如何使用程序获取金字塔形状? 以下代码可以实现:

declare
    s2 varchar2(38);
    s3 varchar2(38);
    m number(10):=6;
    l number(10);
    s1 varchar2(38);
    a varchar2(38);
    b varchar2(38);
begin
    l:=((m*2)/2)+1;
    for r in 0..m
    loop
        s2:=trim(both ' ' from s3)||' '||r;
        a:=lpad(s2,l+r+1,'*')||' '||'';
        b:=rpad(a,(m*2)+r+1,'*');
        s1:=b;
        dbms_output.put_line(s1);
        s3:=trim(both '*' from s1);
    end loop;
end;
/

然后我们会得到这个结果:

****** 0 ****
******0 1 ****
*****0 1 2 ****
****0 1 2 3 ****
***0 1 2 3 4 **** 
**0 1 2 3 4 5 ****
*0 1 2 3 4 5 6 ****

答案 4 :(得分:-1)

declare v_str varchar2(10) := '*'

begin
   for i in 1..5 loop
      v_str:= rpad(v_str, i, '*');
      dbms_output.put_line(v_str);
   end loop;
end;
*
**
***
****
*****