在 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 中打印帕斯卡三角形的主要内容,如果未能解决你的问题,请参考以下文章