c - C 中的谢尔宾斯基地毯
问题描述
我正在建立一个谢尔宾斯基地毯代码。输入 (n) 表示输出是 3^1*3^1 的瓦片块。黑色部分用“#”表示,白色部分用“.”表示。现在我被这段代码困住了。
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
void center(int c, int g, int i, int j, char** a);
int main(void)
{
int c, g, i=0, j=0;
double n, b;
scanf("%lf", &n);
g=n-1;
b=pow(3, n);
c=b;
char **a=(char **)malloc(c * sizeof(int *));
for (i = 0; i < c; i++) {
a[i] = (char *)malloc(c * sizeof(int));
}
if (n==1.0){
for (int e=0; e<3; e++){
for (int f=0; f<3; f++){
if (e==1 && f==1){
a[e][f]='#';
}
else{
a[e][f]='.';
}
printf("%c", a[e][f]);
}
printf("\n");
}
}
else{
center(c, g, i, j, a);
n=n-1.0;
c=c/3;
g--;
while (n>0){
int d=0;
while (d<8){
center(c, g, i, j, a);
i=i+9;
j=j+9;
}
c=c/3;
g--;
d=d*8;
n=n-1.0;
}
for (int e=0; e<c; e++){
for (int f=0; f<c; f++){
if (a[e][f]!='#'){
a[e][f]='.';
}
printf("%c", a[e][f]);
}
printf("\n");
}
}
return 0;
}
void center(int c, int g, int i, int j, char** a){
for (i=((c/2+1)-(3*g-2)-1); i<((c/2+1)+(3*g-2)-1); i++){
for (j=((c/2+1)-(3*g-2)-1); j<((c/2+1)+(3*g-2)-1); j++){
if (a[i][j]!='#'){
a[i][j]='#';
}
}
printf("\n");
}
}
我的计划是创建功能“中心”来创建所有黑色区域。我使用指针指向数组,以便在使用 center() 打印所有黑色空格时复制数组的值。任何帮助将不胜感激。
解决方案
推荐阅读
- yocto - 在 yocto 中构建多个配置
- python - 旧代码不适用于新版 PDFMiner
- java - 无法删除 MongoDB 集合中的所有记录
- javascript - 如何使用 jquery javascript 对表中的文件夹和文件进行排序
- archer - RSA Archer - 多种应用程序布局及其使用
- postgresql - 跨数组值扩展结果集
- javascript - Jest 的 Marble 测试失败,但 Jasmine 的等效测试成功
- python - 熊猫错误:[
] - javascript - AWS S3 无法访问的主机
- angular - 警报在http响应中自行消失,无需等待用户点击ok