中易网

空心六边形 pascal

答案:4  悬赏:40  
解决时间 2021-02-21 06:52
【试题描述】
画图形,是我们需要研究的一个重要课程。菱形好似练的差不多了啊。那么,什么东西,能够有些新意呢?弄个漂亮点的图形吧,空心六边形进入了我们的视线。那么我们就打印一个正六边型吧。根据输入的边长,输出对应大小的正六边型。
【输入描述】
只有一个正整数n(0 < n < 20),代表正六边形的边长。
【输出描述】
是一个边长为n的正多边形。
【输入样例】
5
【输出样例】
【试题来源】
2008海淀区模拟题(FATSHIP)
我的程序哪儿不对
program gh;
var
x:array[1..100,1..100] of char;
n,i,j:longint;
begin
readln(n);
for i:=1 to n do
begin
x[1,n+i-1]:='*';
x[2*n-1,n+i-1]:='*';
end;
for i:=1 to n do
x[i,n+1-i]:='*';
for i:=1 to n do
x[i+n-1,i]:='*';
for i:=1 to n do
x[i,i+2*n-2]:='*';
for i:=1 to n do
x[i+n-1,3*n-1-i]:='*';
for i:=1 to 2*n-2 do
begin
for j:=1 to 3*n-2 do
write(x[i,j]);
writeln;
end;
for i:=1 to 3*n-2 do
write(x[2*n-1,i]);
writeln;
end.
求回答,高分



最佳答案
图像第一行和最后一行错了,应该是* * * * * ,也就是每个*号后有一个空格.
所以程序相应进行了修改如下
program gh;
var
x:array[1..100,1..100] of char;
n,i,j:longint;
begin
readln(n);
for i:=1 to 2*n-1 do
if i mod 2<>0 then //这是处理第1行和最后一行
begin
x[1,n+i-1]:='*';
x[2*n-1,n+i-1]:='*';
end;
for i:=1 to n do
x[i,n+1-i]:='*';
for i:=1 to n do
x[i+n-1,i]:='*';
for i:=2 to n do
x[i,i+3*n-3]:='*'; //由于第一行长度改了,所以这里长度要+n
for i:=1 to n do
x[i+n-1,4*n-2-i]:='*'; //同样这里也是一样
for i:=1 to 2*n-2 do
begin
for j:=1 to 4*n-2 do
write(x[i,j]);
writeln;
end;
for i:=1 to 3*n-2 do
write(x[2*n-1,i]);
writeln;
end.
全部回答
var i,j,k:longint; begin readln(k); for i:=1 to k do begin for j:=1 to k-i do write(' '); write('*'); for j:=1 to 2*i-3 do write(' '); writeln('*'); end; for i:=k-1 downto 1 do begin for j:=1 to k-i do write(' '); write('*'); for j:=1 to 2*i-3 do write(' '); writeln('*'); end; end.
大概看了一下,好像有思路,不想写程序了,思路如下,应该有所帮助的: 一点点分析: 其实本题的本质就是要你找出两个点所在的六边形,然后计算其最短相邻路径 首先,从仅从横坐标考虑 假设r=abs(x1-x2),稍加画图分析,即可得出如下规律: 两点横坐标上相隔1列六边形:d
  • 3楼网友:气场征服一切
  • 2021-02-20 14:37
var a:array[1..58,1..39]of char; i,n:byte; begin fillchar(a,sizeof(a),' '); read(n); for i:=n-1 to 2*n-1 do begin a[i,1]:='*'; a[i,2*n-1]:='*'; for i:=2 to n do begin a[n-i+1,i]:='*'; a[2*n-2+i,i]:='*'; end; for i:=n+1 to 2*n-2 do begin a[n-i+1,i]:='*'; a[2*n-2+i,i]:='*'; end; for i:=1 to 2*n-1 do begin for j:=1 to 3*n-2 do write(a[j,i]); writeln; end; end.
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯