pascal用for循环结构语句编程并输出下图: 1 333 55555 7777777 55555 333 1

 我来答
h1415926535
2013-06-16 · TA获得超过3139个赞
知道小有建树答主
回答量:675
采纳率:100%
帮助的人:394万
展开全部

思路:利用二重循环。

尽管通过一些附加的判断,也能完成本题,但似乎数学的意味少了。

对于本题来说,巧妙利用pascal中的数学函数,可以优化一下代码,就是下面的版本。


  1. min(x,y)表示x,y中较小的那个数;

  2. 有7行,最外层就用 i 从1 循环到 7 ;

  3. 每行都是输出奇数,1~4行还好判断,输出(2i-1)个(2i-1)就行了;

  4. 5~7行稍微麻烦点,通过分析,需要输出 2*min(i,8-i)-1 个 2*min(i,8-i)-1 ,代进去看看:

    第6行,i=6,min(i,8-i)的结果是2,因此2*min(i,8-i)-1 的结果是3,即输出3个3,正好符合(这个部分我想了很久)。

  5. 至于每行开头空格的个数,其实用一个 abs(4-i) 就可以了。(绝对值函数)



优化版:

uses math;         //调用数学库;

var i,j:integer;

begin

 for i:=1 to 7 do

 begin

  for j:=1 to abs(4-i) do write(' ');         //输出空格;

  for j:=1 to 2*min(i,8-i)-1 do

   write(2*min(i,8-i)-1);

  writeln;

 end;

end.


输出:


RedBaronVIP
2013-06-17 · TA获得超过1147个赞
知道小有建树答主
回答量:655
采纳率:0%
帮助的人:242万
展开全部
1、这种问题弱到爆。能用就结贴,人的基本素质。
2、另外那位搞“优化”的哥们,提点小小建议:您的代码只是长度短了一点点,效率没有提高,反而下降。您知道Abs和Min函数编译展开后多长么?照这个道理我直接用Write输出字符岂不是更短,一行代码就行了。此外如果针对7这个数本身的特性来写程序,是不是太那个了,如果我最大输出的是9呢?或者是字符'Q'呢?
program Rhombus;
const
MAX = 7; {这个数可以改,1~9之间的奇数都行}
var
i, j, step: Integer;
begin
i := 1;
step := 2;
while i > 0 do
begin
for j := 1 to (MAX - i) div 2 do Write(#32);
for j := 1 to i do Write(i);
Writeln;
if i >= MAX then step := -step;
Inc(i, step);
end;
Readln;
end.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
MichaelMagic
2013-06-16 · TA获得超过1946个赞
知道小有建树答主
回答量:707
采纳率:0%
帮助的人:638万
展开全部
哈哈,上学时常弄这个。
program XX;
var
m, n: Integer;
begin
for m := 1 to 7 do
begin
if m mod 2 <> 0 then for n := 1 to m do write(n);
writeln;
end;
for m := 5 downto 1 do
begin
if m mod 2 <> 0 then for n := 1 to m do write(n);
writeln;
end;
end.

现编的,没调试,自己试试吧(我这知道你的题意是否是分行?我加了writeln。如果不是分行就去掉它)
追问
输出格式是 1
333
55555
7777777
55555
333
1
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式