链接:
https://www.nowcoder.com/acm/contest/67/G
来源:牛客网
来源:牛客网
题目描述
圈圈圆圆圈圈,lulu小朋友最近看喜羊羊看多了,老是受刺激就画圆圈,听到小于8的数字时,还会画出十分有规律的圆圈,现在你需要根据样例观察出规律,编写程序,根据输入的数字n(n<8),输出对应的圆圈。
输入描述:
第一行是样例数T(T<9) 第2到2+T-1行每行有一个整数n(n<8),代表lulu听到的数字
输出描述:链接:https://www.nowcoder.com/acm/contest/67/G
来源:牛客网听到对应数字时,输出对应样子的圆圈。
注意分割图形的位置,分界点
O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O
#include<bits/stdc++.h>
using
namespace
std;
char
mm[10000][100000];
void
disp(
int
s,
int
x,
int
y)
{
if
(s==1)///分割到无法分割,
{
mm[x][y-1]=
'O'
;
mm[x][y+1]=
'O'
;
mm[x-1][y]=
'O'
;
mm[x+1][y]=
'O'
;
return
;
}
int
t=
pow
(3,s-1);///
图形以3*3为一个小区域分割
//(x,y)为中心点上下左右进行分割,移动距离以最小区域为准
disp(s-1,x,y-t);
disp(s-1,x,y+t);
disp(s-1,x+t,y);
disp(s-1,x-t,y);
}
int
main()
{
int
n,m,a,b,s;
scanf
(
"%d"
,&n);
while
(n--)
{
scanf
(
"%d"
,&s);
if
(s==0)
{
puts
(
"O"
);
continue
;
}
int
p=
pow
(3,s);
for
(
int
i=1; i<=p; i++)
for
(
int
j=1; j<=p; j++)
mm[i][j]=
' '
;
disp(s,p/2+1,p/2+1);///图形的中间点
int
i,j,c,k;
for
( i=1; i<=p; i++)
{
c=p;
for
( k=p; k>=0; k--)
{
if
(mm[i][k]!=
' '
)
{
c=k;
break
;
}
}
for
( j=1; j<=c; j++)
printf
(
"%c"
,mm[i][j]);
puts
(
""
);
}
}
return
0;
}