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时输出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])