列表

详情


NC14974. 圆圈

描述

    圈圈圆圆圈圈,lulu小朋友最近看喜羊羊看多了,老是受刺激就画圆圈,听到小于8的数字时,还会画出十分有规律的圆圈,现在你需要根据样例观察出规律,编写程序,根据输入的数字n(n<8),输出对应的圆圈。

输入描述

第一行是样例数T(T<9)
第2到2+T-1行每行有一个整数n(n<8),代表lulu听到的数字

输出描述

听到对应数字时,输出对应样子的圆圈。

示例1

输入:

4
0
1
2
3

输出:

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

说明:

当n=0时输出
O
当n=1时输出
*O
O*O
*O
当n=2时输出
****O
***O*O
****O
*O*****O
O*O***O*O
*O*****O
****O
***O*O
****O
上面的'O'是大写英文字母O,'*'代表空格,每一行最后一个O后面不带空格。

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C++(clang++ 11.0.1) 解法, 执行用时: 219ms, 内存消耗: 14452K, 提交时间: 2023-04-12 20:46:17

#include<bits/stdc++.h>
using namespace std;
char mp[3000][3000];
int f[10];
void dfs(int x,int y,int n)
{
	if(n==0){
		mp[y][x]='O';
		return;
	}
	dfs(x+f[n-1],y,n-1);
	dfs(x,y+f[n-1],n-1);
	dfs(x+2*f[n-1],y+f[n-1],n-1);
	dfs(x+f[n-1],y+2*f[n-1],n-1);
} 
int main()
{
	int i,n,j,T;
	f[0]=1;
	for(i=1;i<=10;i++)f[i]=f[i-1]*3;
	cin>>T;
	while(T--)
	{
		cin>>n;
		dfs(0,0,n);
		for(i=0;i<f[n];i++,cout<<endl)
		for(j=0;j<f[n];j++)
		{
			if('O'==mp[i][j])cout<<'O';
			else cout<<" ";
		}
		memset(mp, 0, sizeof mp);	
	}
	
	return 0;
}

Python3 解法, 执行用时: 50ms, 内存消耗: 16396K, 提交时间: 2021-07-31 22:36:45

ws = {i:3**i for i in range(9)}
hs = {0:1}
for i in range(1,9):
    hs[i] = hs[i-1]*3+2
ds = {0:"O"}
def f(n):
    for i in range(n):
        s1,s2,s3='','',''
        for line in ds[i].split('\n'):
            s1+=' '*ws[i]+line+'\n'
            line1 = line.ljust(ws[i]) 
            s2+=line1+' '*ws[i]+line+'\n'
            s3+=' '*ws[i]+line+'\n'
        s=s1+s2+s3.strip('\n')
        ds[i+1]=s
t=int(input())
ma=0
for i in range(t):
    g=int(input())
    if g>ma:ma=max(g,ma);f(ma)
    print(ds[g])

Python(2.7.3) 解法, 执行用时: 24ms, 内存消耗: 9796K, 提交时间: 2018-01-21 16:57:00

def f(n):
    if n == 0:
        return 1, ['O']
    else:
        py, pz = f(n - 1)
        o = [' ' * py + _ for _ in pz]
        o.extend([_ + ' ' * (py + py - len(_)) + _ for _ in pz])
        o.extend([' ' * py + _ for _ in pz])
    return py * 3, o


for _ in xrange(input()):
    print '\n'.join(f(input())[1])

上一题