洛谷7月赛的第一题,赦免战俘,洛谷题号:P5461

题目背景

借助反作弊系统,一些在月赛有抄袭作弊行为的选手被抓出来了!

题目描述

现有 2^n\times 2^n (n\le10)2n×2n(n10) 名作弊者站成一个正方形方阵等候 kkksc03 的发落。kkksc03 决定赦免一些作弊者。他将正方形矩阵均分为 4 个更小的正方形矩阵,每个更小的矩阵的边长是原矩阵的一半。其中左上角那一个矩阵的所有作弊者都将得到赦免,剩下 3 个小矩阵中,每一个矩阵继续分为 4 个更小的矩阵,然后通过同样的方式赦免作弊者……直到矩阵无法再分下去为止。所有没有被赦免的作弊者都将被处以棕名处罚。

给出 nn,请输出每名作弊者的命运,其中 0 代表被赦免,1 代表不被赦免。

输入输出格式

输入格式:

一个整数 nn。

输出格式:

2^n*2^n 的01矩阵,代表每个人是否被赦免。数字之间有一个空格。

第一眼看到题:找规律!然后就会爆零

扫描二维码关注公众号,回复: 6857406 查看本文章

第二眼看到题:还是找规律!

我这里不多说,直接看程序吧,我个人觉得程序将的比较清楚

#include<bits/stdc++.h>
using namespace std;
int n,c=1;
void into()//输入函数
{
cin>>n;
for(register int i=0;i<n;i++)c=c*2;
}
int a[10024][10024];
void slove()//核心函数
{
for(register int i=0;i<c-1;i++)a[0][i]=0;//第一行除了最右边那个都是0
for(register int i=0;i<c;i++)
{
a[i][c-1]=1;
}//最右边一列全部是1
for(register int i=1;i<c;i++)
{
for(register int j=0;j<c-1;j++)
{
a[i][j]=(a[i-1][j]+a[i-1][j+1])%2;
}
}//该数字为当前位置上面的数字和右上的数字与2取余得出来的!
for(register int i=0;i<c;i++)
{
for(register int j=0;j<c;j++)
{
cout<<a[i][j]<<" ";
}//输出大法记得加空格
cout<<endl;
}//记得换行啊!

}
int main()
{
into();
slove();
return 0;
}

猜你喜欢

转载自www.cnblogs.com/zmcpp/p/11239090.html