赦免战俘C语言解析

1.题目

# 赦免战俘

## 题目背景

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

## 题目描述

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

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

## 输入格式

一个整数 n。

## 输出格式

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

## 样例 #1

### 样例输入 #1

```
3
```

### 样例输出 #1

```
0 0 0 0 0 0 0 1
0 0 0 0 0 0 1 1
0 0 0 0 0 1 0 1
0 0 0 0 1 1 1 1
0 0 0 1 0 0 0 1
0 0 1 1 0 0 1 1
0 1 0 1 0 1 0 1
1 1 1 1 1 1 1 1
```

2.题目分析:从输出样例中找规律

(1)定义一个二维数组

(2)找出1和0之间的规律

3.

(1)初始化二维数组,再根据规律可知每一行的最后一个为1.

for(i=0;i

(2)再找出相应的0,1之间的规律

a[0][m-1]=1,a[1][m-1]=1,a[1][m-2]=1;
	for(i=2;i

注:这里注意运用if语句,简单的为真,作为if的判断条件,复杂的直接用else,并且整个输出中也只有0和1.所以在复杂的关系中要充分利用if语句。

4.完整代码

#include
#include
int main()
{
	int n,m;
	scanf("%d",&n);
	m=pow(2,n);
	int a[m][m];
	int i,j;
	for(i=0;i

你可能感兴趣的:(算法,矩阵,线性代数)