在 oracle pl/sql 中打印帕斯卡三角形

Posted

技术标签:

【中文标题】在 oracle pl/sql 中打印帕斯卡三角形【英文标题】:Print pascal triangle in oracle pl/sql 【发布时间】:2014-09-19 08:17:42 【问题描述】:

如何使用 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 循环。

【问题讨论】:

还有,在后来的新闻中,如何在 8051 汇编中编写会计包,在面向对象的 COBOL 中编写操作系统,以及几乎在 Pascal 中的任何东西 :-) 非常欢迎您来到ask for homework here。但是,如果这样做,您肯定应该展示您迄今为止所做的尝试。这不仅会证明你不是希望我们来做你的工作。但它也有助于确定您的实际水平以及可能是您真正的困难。 我之前已经回答过这个问题,但是在我链接之前,您应该展示您已经尝试过的内容以及遇到的问题;否则你可能无法理解或从任务中学习。 (当然很容易找到我之前的答案,但请先尝试一下!) 【参考方案1】:

这是一个很好的机会,可以展示一个人在不知道如何进行的情况下如何从逻辑上解决问题。没有人在这里为您做功课,但我们可以提供一些解决问题的建议,然后在我们看到您提出的问题时提供指导。

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

   *
  * *
 * * *
* * * *

您是否注意到重复出现的模式? “循环模式”表示需要某种循环。也许如果你用另一个字符替换前导空格,另一个重复出现的模式会变得很明显:

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

因此,另一个重复模式中的重复模式。前导空格数与行中“*”数之间的关系是什么?根据行的不同,可能需要进行一两次计算。这就是我想要放弃的所有内容,因为任务的重点是让你弄清楚。

希望这对如何在不付出太多努力的情况下解决问题有所帮助。

【讨论】:

好的,感谢 Gary 演示帕斯卡三角形,实际上我希望像第一个一样打印,但它需要像 1,3,5,7 这样的奇数。我期待 Lpad() 和 Rpad() PL/SQL 函数中的解决方案。【参考方案2】:

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

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 中的一个匿名块,我也有一个四循环的答案,它可以正确打印出我预期的帕斯卡三角形。

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;

感谢朋友们的大力支持..

【讨论】:

You can do it in plain SQL as well. 好的,谢谢 Alex,我喜欢这个 LINK 中的答案。还有.. 这与我链接到 *8-) 的答案相同(我的!)【参考方案3】:
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;

【讨论】:

在给出答案时,最好对 WHY 给出一些解释,你的答案就是那个。【参考方案4】:

如何通过程序获得金字塔形状? 下面的代码可以实现:

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 ****

【讨论】:

【参考方案5】:
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;
*
**
***
****
*****

【讨论】:

以上是关于在 oracle pl/sql 中打印帕斯卡三角形的主要内容,如果未能解决你的问题,请参考以下文章

在C中输入三角形的高度时打印帕斯卡三角形

Python案例:打印杨辉三角形

常用算法——打印杨辉三角形

常用算法详解——打印杨辉三角形

打印 Oracle Pl/sql 光标

不使用数组实现打印“杨辉三角形”