2018年全国多校算法寒假训练营练习比赛(第一场)G 圆圈

Wesley13
• 阅读 708

链接:https://www.nowcoder.com/acm/contest/67/G
来源:牛客网

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

    圈圈圆圆圈圈,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时输出*OO*O*O当n=2时输出****O***O*O****O*O*****OO*O***O*O*O*****O****O***O*O****O上面的'O'是大写英文字母O,'*'代表空格,每一行最后一个O后面不带空格。

备注:

对于100%的数据,0<T<9;0<=n<8;

做法:

每一块的宽和高可以先算出来

然后递归输出

比如输出一个以 (x,y) 坐标为基准的大小为k的图片

可以由递归地由

(x,y)坐标为基准的大小为k-1的图片

(x+w,y-w)坐标为基准的大小为k-1的图片

(x+w,y+w)坐标为基准的大小为k-1的图片

(x+w*2,y)坐标为基准的大小为k-1的图片 构成

递归构造即可

代码:

 1 #include<iostream>
 2 using namespace std;
 3 #include<cstring>
 4 #include<cstdlib>
 5 #include<string>
 6 int f[10]={0};
 7 char s[2500][2500];
 8 int maxh=0;
 9 void paint(int x,int &w){
10     if(x<0){
11         w=0;
12         return;
13     }
14     if(f[x]>0){
15         w=f[x];
16         return;
17     }
18     if(x==0){
19         w=1;
20         return;
21     }
22     int ww=0;
23     paint(x-1,ww);
24     w=ww*3;
25     return;
26 }
27 int getf(int x){
28     int w=0;
29     paint(x,w);
30     return w;
31 }
32 int maxn[2500];
33 void dfs(int x,int y,int k){
34     if(k==0){
35         if(x>maxh)
36         maxh=x;
37         if(maxn[x]<y)
38         maxn[x]=y;
39         s[x][y]='O';
40         return;
41     }
42     int w=getf(k-1);
43     dfs(x,y,k-1);
44     dfs(x+w,y-w,k-1);
45     dfs(x+w,y+w,k-1);
46     dfs(x+w*2,y,k-1);
47 }
48 int main(){
49     int t;
50     scanf("%d",&t);
51     int n;
52     for(int i=1;i<=t;i++){
53         scanf("%d",&n);
54         int k=getf(n-1);
55         k=k+getf(n-1)/2+1;
56         for(int i=0;i<=2499;i++)
57             maxn[i]=0;
58         maxh=0;
59         memset(s,0,sizeof(s));
60         dfs(1,k,n);
61         for(int i=1;i<=maxh;i++){
62             for(int j=1;j<=maxn[i];j++){
63                 if(s[i][j]==0)
64                     s[i][j]=' ';
65                 putchar(s[i][j]);
66             }
67             putchar('\n');
68         }
69     }
70     return 0;
71 }

2018年全国多校算法寒假训练营练习比赛(第一场)G 圆圈

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
2年前
Java秋招面经大合集
转载链接:https://www.nowcoder.com/discuss/50439?type0&order4&pos4&page1(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.nowcoder.com%2Fdiscuss%2F50439%3Ftype%3D0
Wesley13 Wesley13
2年前
2018校招笔试真题汇总
转载链接:https://www.nowcoder.com/discuss/68802?type2&order0&pos1&page1(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.nowcoder.com%2Fdiscuss%2F68802%3Ftype%3D2%26
Stella981 Stella981
2年前
PHP 使用 Redis
PHPRedis项目地址(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fgithub.com%2Fphpredis%2Fphpredis)安装步骤参考链接(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fg
Stella981 Stella981
2年前
IDA Pro
原文地址:ReversingCprogramswithIDAproandHexrays(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fblog.0xbadc0de.be%2Farchives%2F67)简介在假期期间,我花了很多时间学习和逆向用C写
Stella981 Stella981
2年前
Comet OJ
题意https://www.cometoj.com/contest/52/problem/C?problem\_id2416(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fwww.cometoj.com%2Fcontest%2F52%2Fproblem%2FC%3Fprob
Stella981 Stella981
2年前
Codeforces Round #611 (Div. 3)
原题面:https://codeforces.com/contest/1283(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fcodeforces.com%2Fcontest%2F1283)A.MinutesBeforetheNewYear题目大意:给定时间,问距离零点
可莉 可莉
2年前
2019牛客多校第一场 I Points Division(动态规划+线段树)
2019牛客多校第一场IPointsDivision(动态规划线段树)传送门:https://ac.nowcoder.com/acm/contest/881/I(https://www.oschina.net/action/GoToLink?urlhttps%3
Stella981 Stella981
2年前
Codeforces Round #565 (Div. 3) C. Lose it!
链接:https://codeforces.com/contest/1176/problem/C(https://www.oschina.net/action/GoToLink?urlhttps%3A%2F%2Fcodeforces.com%2Fcontest%2F1176%2Fproblem%2FC)题意:Youare
Stella981 Stella981
2年前
2019牛客多校第一场 I Points Division(动态规划+线段树)
2019牛客多校第一场IPointsDivision(动态规划线段树)传送门:https://ac.nowcoder.com/acm/contest/881/I(https://www.oschina.net/action/GoToLink?urlhttps%3
Wesley13 Wesley13
2年前
2018寒假作业:总结
<fontsize32018寒假学习总结前言今年寒假刚开始前,本打算好好的学习服务器后端建设以及趁着寒假的空余时间配合ACM队的寒假比赛学习算法,却在开始后不久就收到了班主任和助教学长学姐的关怀,送来了C寒假学习套餐,使得原本双开就比较繁忙的寒假生活变得更加的忙碌。不过寒假虽然忙,但是却没有初高中赶寒假作业那般枯燥,有趣的题目以及兴趣