| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1362 人关注过本帖
标题:棋盘覆盖这道题能帮忙看一下吗?
只看楼主 加入收藏
Jason_
Rank: 2
来 自:浙江台州
等 级:论坛游民
帖 子:88
专家分:66
注 册:2019-7-14
结帖率:66.67%
收藏
已结贴  问题点数:5 回复次数:1 
棋盘覆盖这道题能帮忙看一下吗?
题目描述
在一个2k(这里为2的k次方)×2k个方格组成的棋盘中恰有一个方格与其它方格不同(图中标记为-1的方格),称之为特殊方格。现用L型(占3个小方格)纸片覆盖棋盘上除特殊方格的所有部分,各纸片不得重叠,于是,用到的纸片数恰好是(4k-1)/3。在下表给出的一个覆盖方案中,k=2,相同的3个数字构成一个纸片。
输入
一行,三个整数n,tr,tc,分别表示棋盘尺寸(每行方格数),特殊方格所在行,特殊方格所在列。其中2<=n<=64。
输出
n行,每行n个整数,每个整数的场宽为5,表示被纸片覆盖的棋盘。


题目网址:http://oj.
搜索更多相关主题的帖子: 棋盘 整数 表示 每行 输出 
2019-07-23 21:39
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9024
专家分:54030
注 册:2011-1-18
收藏
得分:5 
瞎写了一个,对不对我不知道,因为没有帐号提交

程序代码:
#include <cstdio>

void foo( unsigned n, unsigned tr, unsigned tc, int matrix[], int& index )
{
    if( n < 2 )
        return;

    int x = (tr>=n/2)*2 + (tc>=n/2); // 已经标了号的格子在第几象限。0:左上, 1:右上, 2:左下, 3:右下
    if( x != 0 )
        matrix[(n/2-1)*64+(n/2-1)] = index;
    if( x != 1 )
        matrix[(n/2-1)*64+(n/2+0)] = index;
    if( x != 2 )
        matrix[(n/2+0)*64+(n/2-1)] = index;
    if( x != 3 )
        matrix[(n/2+0)*64+(n/2+0)] = index;
    ++index;

    foo( n/2, x==0?tr:n/2-1, x==0?tc:n/2-1, matrix, index );
    foo( n/2, x==1?tr:n/2-1, x==1?tc-n/2:0, matrix+n/2, index );
    foo( n/2, x==2?tr-n/2:0, x==2?tc:n/2-1, matrix+n/2*64, index );
    foo( n/2, x==3?tr-n/2:0, x==3?tc-n/2:0, matrix+n/2*64+n/2, index );
}

int main( void )
{
    unsigned n, tr, tc;
    scanf( "%u%u%u", &n, &tr, &tc );
    tr-=1, tc-=1; // base1 的都是傻逼

    int matrix[64*64];
    matrix[tr*64+tc] = -1;
    int index = 1;
    foo( n, tr, tc, matrix, index );

    for( unsigned r=0; r!=n; ++r )
    {
        for( unsigned c=0; c!=n; ++c )
            printf( "%5d", matrix[r*64+c] );
        putchar( '\n' );
    }
}

2019-07-26 16:43
快速回复:棋盘覆盖这道题能帮忙看一下吗?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.034788 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved