【试题描述】
画图形,是我们需要研究的一个重要课程。菱形好似练的差不多了啊。那么,什么东西,能够有些新意呢?弄个漂亮点的图形吧,空心六边形进入了我们的视线。那么我们就打印一个正六边型吧。根据输入的边长,输出对应大小的正六边型。
【输入描述】
只有一个正整数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.
求回答,高分
空心六边形 pascal
答案:4 悬赏:40
解决时间 2021-02-21 06:52
- 提问者网友:伴他一生,无悔
- 2021-02-20 12:01
最佳答案
- 二级知识专家网友:一个很哇塞的汉子
- 2021-02-20 13:28
图像第一行和最后一行错了,应该是* * * * * ,也就是每个*号后有一个空格.
所以程序相应进行了修改如下
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.
所以程序相应进行了修改如下
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.
全部回答
- 1楼网友:duile
- 2021-02-20 16:32
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.
- 2楼网友:深街酒徒
- 2021-02-20 15:26
大概看了一下,好像有思路,不想写程序了,思路如下,应该有所帮助的:
一点点分析:
其实本题的本质就是要你找出两个点所在的六边形,然后计算其最短相邻路径
首先,从仅从横坐标考虑
假设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.
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯