本人在完成此题的时候,愉快的写完了程序,但是经历了一段玄幻的故事,于是分享给大家。
开始我认真完成本题,就在我提交之后,OJ返回提示我0....原来我用了 %2d,于是修改后再次提交...省略....,提交后OJ提示:Compile Error,以及如下编译信息:
编译信息
编译失败
/tmp/compiler__hvsfntj/src:4:5: 错误:文件域中的动态可变的‘a’
int a[N][N];
^
/tmp/compiler__hvsfntj/src:4:5: 错误:文件域中的动态可变的‘a’
但是当我认真检查完程序后并未发现问题,于是找到小伙伴一起探讨,小伙伴很机智,直接复制我的程序提交,然后....这个奇怪的问题诞生了,他竟然AC了,AC了,AC了;
于是我再次提交,却得到:Compile Error;
小伙伴再次复制我的新程序提交,然后....他又AC了,AC了,AC了; 于是我再次提交,却得到:Compile Error;
于是我在想:是有什么奇怪的知识点我不知道吗?
请大家给我普及一下,以及下面为本人的源程序,就是一直Compile Error的。
源程序如下:
#include<stdio.h>
#include<math.h>
const int N=1e3+30;
int a[N][N];
void print(int x1, int y1, int x2, int y2){
// printf("(%2d, %2d) -> (%2d, %2d)\n",x1,y1,x2,y2);
for(int i=x1; i<=x2; i++){
for(int j=y1; j<y2; j++){
printf("%d ", a[i][j] ? 0:1);
}
printf("%d\n", a[i][y2] ? 0:1);
}
}
void fun(int x1, int y1, int x2, int y2){
if(x1==x2) return;
for(int i=x1; i<=(x1+x2)/2; i++){
for(int j=y1; j<=(y1+y2)/2; j++){
a[i][j]=1;
}
}
// print(x1, y1, x2, y2);
fun(x1, (y1+y2)/2+1, (x1+x2)/2, y2);
fun((x1+x2)/2+1, y1, x2, (y1+y2)/2);
fun((x1+x2)/2+1, (y1+y2)/2+1, x2, y2);
}
int main(){
// freopen("")
int n=3; scanf("%d", &n);
n=(1<<n);
fun(1,1,n,n);
print(1,1,n,n);
return 0;
}