题解 | Repeater(不动点最简洁?分制思想)

Repeater

https://www.nowcoder.com/practice/97fd3a67eff4455ea3f4d179d6467de9

未必是最快的,但或许是最简洁的。

灵感:如果我拿着一张世界地图在地球上行走,那地图上一定有一个点,就代表它本身。

注意到,我们只要找到不动点即可:

1)如果一个点在粗粒度已经落在了“空白区”,直接输出空格即可。

2)只有不断细分,直到最小尺度仍不是空白,才输出相应的符号。

#include <stdio.h>
#include <math.h>

int main() {
    int n, i, j, lev;
    char t, temp[7][7];
    while (scanf("%d", &n)&&n!=0) {
        //input
        getchar();
        for (i = 0; i < n; ++i) {
            fgets(temp[i], sizeof(temp[i]), stdin);
            // for (j = 0; j < n; ++j) {
            //     if(temp[i][j]=='\n'||temp[i][j]=='\0') temp[i][j]=' ';
            // } 默认测试样例丢空格,实际测试样例是方的
        }
        scanf("%d", &lev);
        getchar();

        //output
        int si=pow(n, lev), ti, tj, tl;
        for (i = 0; i < si; ++i) {
            for (j = 0; j < si; ++j) {
                ti=i; tj=j; tl=lev-1;
                int flag=1;
                while(tl>0){
                        int tag=pow(n, tl--);
                        if(temp[ti/tag][tj/tag]==' '){
                            flag=0; break;
                        }else{
                            ti = ti%tag; tj = tj%tag;
                        }
                }
                printf("%c", flag ? temp[ti][tj]:' ');
            }
            printf("\n");
        }
    }
    return 0;
}

全部评论

相关推荐

点赞 评论 收藏
分享
01-30 10:21
中北大学 golang
27届学院本誓死冲击...:技术栈不用搞这么详细,主要还是看实习和项目,毕竟技术栈就那点,你能写这么多,别人也可以写这么多,模版换一下换成上下的,不知道怎么排版可以去看看别人怎么写
投了多少份简历才上岸
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务