P5461 赦免战俘 ## 一个十分奇怪的问题Compile Error
查看原帖
P5461 赦免战俘 ## 一个十分奇怪的问题Compile Error
387677
hellohebin楼主2021/11/15 10:38

一个十分奇怪的问题

本人在完成此题的时候,愉快的写完了程序,但是经历了一段玄幻的故事,于是分享给大家。

开始我认真完成本题,就在我提交之后,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;
}
2021/11/15 10:38
加载中...