#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int s;
void dismiss(int* p, int n) {
int i, j, t= (int)pow(2, n - 1);
if (n == 1) {
*p = 0;
*(p + 1) = *(p + s) = *(p + s + 1) = 1;
}
else {
for (i = 0; i < t; i++)
for (j = 0; j < t; j++)
*(p + i * s + j) = 0;
dismiss(p + t, n - 1);
dismiss(p + s*t, n - 1);
dismiss(p + (s+1)*t, n - 1);
}
}
int main() {
int n, i, j;
scanf("%d", &n);
s = (int)pow(2, n);
int* p = (int*)calloc( s*s, sizeof(int));
dismiss(p, n);
for (i = 0; i < s; i++) {
for (j = 0; j < s-1; j++)
printf("%d ", *(p + i * s + j));
printf("%d\n", *(p + i * s + j));
}
free(p);
return(0);
}
洛谷P5461 赦免战俘经典解法
最新推荐文章于 2024-09-24 19:50:57 发布
本文介绍了一个使用C语言实现的递归算法,用于构造一个特定的二维图案。该算法通过递归调用自身来填充二维数组,最终输出由0和1组成的图案。程序首先接收用户输入的层数,然后通过递归函数对数组进行填充,最后打印出图案。
783

被折叠的 条评论
为什么被折叠?



