如何使用' *'打印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循环。
答案 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;
*
**
***
****
*****