CSP初赛复习-32-完善程序-递归
完善程序
(矩阵变幻)有一个奇幻的矩阵,在不停的变幻,其变幻方式为
数字 0变成矩阵
0 0
0 1
数字 1变成矩阵
1 1
1 0
最初该矩阵只有一个元素0,变幻n次后,矩阵会变成什么样?
例如,矩阵最初为
0
矩阵变幻 1次后
0 0
0 1
矩阵变幻 2 次后
0 0 0 0
0 1 0 1
0 0 1 1
0 1 1 0
输入一行一个不超过 10的正整数n
输出变幻n次后的矩阵
试补全程序
提示
<< 表示二进制左移运算符,例如 \((11)_2\) $ <<2=(1100)_2 $
而 ^ 表示二进制异或运算符,它将两个参与运算的数中的每个对应的二进制位—进行比较,若两个二进制位相同,则运算结果的对应二进制位为 0 ,反之为 1
#include <cstdio>
using namespace std;
int n;
const int max_size = 1 << 10;//定义整形常量 左移10位 2^10=1024
int res[max_size][max_size];//二维数组
/*
x y 矩阵中的坐标
n第几层
本层4个位置的初始数字
*/
void recursive(int x, int y, int n, int t) {
if (n == 0) {//递归到n=0时结束
res[x][y] = ①;//赋值当前位置状态
return;
}
int step = 1 << (n - 1);//每次左右分成2份 上下分成2份 当前相对应当的位置
recursive(②, n - 1, t);//左上 x,y
recursive(x, y + step, n - 1, t);//左下 x,y+step
recursive(x + step, y, n - 1, t);//右上 x+step,y
recursive(③, n - 1, !t);//右下x+step,y+step
}
int main() {
scanf("%d", &n);//n次转换
recursive(0, 0, ④);//n次转换 从0开始
int size = ⑤;//二维矩阵一维的长度 一维度长度每次增加一倍 增加n次 所以1<<n
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++)
printf("%d", res[i][j]);
puts("");
}
return 0;
}
分析
n=1时
step=1
左上 recursive(0,0,0,0) =0
左下 recursive(0,1,0,0) =0
右上 recursive(1,0,0,0) =0
右下 recursive(1,1,0,0) =1
具体数据
0 0
0 1
n=2时
step=2
左上 recursive(0,0,1,0)
对应
左上 recursive(0,0,0,0) =0
左下 recursive(0,1,0,0) =0
右上 recursive(1,0,0,0) =0
右下 recursive(1,1,0,0) =1
左下 recursive(0,2,1,0)
左上 recursive(0,2,0,0) =0
左下 recursive(0,3,0,0) =0
右上 recursive(1,2,0,0) =0
右下 recursive(1,3,0,0) =1
右上 recursive(2,0,1,0)
左上 recursive(2,0,0,0) =0
左下 recursive(2,1,0,0) =0
右上 recursive(3,0,0,0) =0
右下 recursive(3,1,0,0) =1
右下 recursive(2,2,1,1)
左上 recursive(2,2,0,1) =1
左下 recursive(2,3,0,1) =1
右上 recursive(3,2,0,1) =1
右下 recursive(3,3,0,1) =0
具体数据
0 0 0 0
0 1 0 1
0 0 1 1
0 1 1 0
①处应填()
A n%2
B 0
C t
D 1
答案 C
赋值当前状态t,某坐标位置和坐标在4个位置中的具体那个位置和变换次数2个因素有关
1次递归
0 0
0 1
左上0 左下0 右上0 右下1
2次递归,如下图
0 0 0 0
0 1 0 1
0 0 1 1
0 1 1 0
第1次,把如下16个数字分成4部分
左上,左下,右上t都为0
右下 t为1
如果右下再进行递归,则t为1
左上,左下,右上t都为1
左下t为0
如下图
1 1
1 0
②处应填()
A x-step , y-step
B x , y-step
C x-step , y
D x , y
答案 D
左上作为参考点x,y ,左下 x,y+step,右上 x+step,y 右下 x+step,y+step
左下 x,y+step,右上 x+step,y已经给出
左上为x,y 右下为x+step,y+step
当n=1时,和如下数据符合
0 0
0 1
③处应填()
A x-step , y-step
B x+step , y+step
C x-step , y
D x , y-step
答案 B
答案通第2题
④处应填()
A n-1 , n%2
B n , 0
C n , n%2
D n-1 , 0
答案 B
调用递归函数
从坐标(0,0)开始进行n轮转换,初始状态赋值为0
⑤处应填()
A 1 << (n+1)
B 1 << n
C n+1
D 1<< (n-1)
答案 B
二维矩阵一维的长度 一维度长度每次增加一倍 增加n次 所以1<<n
作者:newcode 更多资源请关注纽扣编程微信公众号

从事机器人比赛、机器人等级考试、少儿scratch编程、信息学奥赛等研究学习

浙公网安备 33010602011771号