运行时错误:退出代码为-1073741819

时间:2018-05-21 19:05:57

标签: c++ runtime

当我在我的操作系统中运行它没有问题,但是当我在cf自定义测试中运行它并且在运行时发生单个偶数或奇数整数并且我不知道如何修复它

#include <bits/stdc++.h>
using namespace std;

const int maxn=1e3+100;

int jadval[maxn][maxn];

bool used[maxn];

//////////////////////////////////////////////////////////

 int** generate_odd_square(int n) {

    int value = 0;
    int squareSize = n * n;
    int c = n / 2, r = 0,i;

    int** result = new int *[1000];

    for(i=0;i<n;i++)
        result[i] = new int [1000];

    while (++value <= squareSize) {
        result[r][c] = value;
        if (r == 0) {
            if (c == n - 1) {
                r++;
            } else {
                r = n - 1;
                c++;
            }
        } else if (c == n - 1) {
            r--;
            c = 0;
        } else if (result[r - 1][c + 1] == 0) {
            r--;

            c++;
        } else {
            r++;
        }
    }
    return result;
}
//////////////////////////////////////////////

void generate_double_even_square(int n){

    int counter=1;
    fill_n(used,n*n+100,true);
    for (int i=0; i<n; i++){
        for (int j=0; j<n; j++){
            if (i>=0 and i<n/4 and j<n/4 and j>=0)
                jadval[i][j]=counter++;
            else
            if (i>=(n/4)*3 and i<=n and j>=0 and j<n/4)
                jadval[i][j]=counter++;
            else
            if (i>=(n/4)*3 and i<=n and j>=(n/4)*3 and j<=n)
                jadval[i][j]=counter++;
            else
            if (j>=(n/4)*3 and j<=n and i>=0 and i<n/4)
                jadval[i][j]=counter++;
            else
            if (j>=n/4 and j<(n/4)*3 and i>=n/4 and i<(n/4)*3)
                jadval[i][j]=counter++;
            else{
                counter++;
                used[counter-1]=false;
            }
        }
    }
    counter=n*n;
    for (int i=0; i<n; i++)
        for (int j=0; j<n; j++){
                if (used[counter]==true)
                    counter--;
                else
                    jadval[i][j]=counter--;
            }
    for (int i=0; i<n; i++){
        for (int j=0; j<n; j++)
            cout<<jadval[i][j]<<" ";
        cout<<endl;
    }
}
/////////////////////////////////////////////////////////

int** generate_single_even_square(int n) {


    int size = n * n;
    int halfN = n / 2;
    int zirmatricSize = size / 4, i;

    int** zirmatric = generate_odd_square(halfN);
    int gridFactors[] = {0, 2, 3, 1};
    int** result = new int *[1000];

    for(i=0;i<n;i++)
        result[i] = new int [1000];

    for (int r = 0; r < n; r++) {
        for (int c = 0; c < n; c++) {
            int grid = (r / halfN) * 2 + (c / halfN);
            result[r][c] = zirmatric[r % halfN][c % halfN];
            result[r][c] += gridFactors[grid] * zirmatricSize;
        }
    }

    int nColsLeft = halfN / 2;
    int nColsRight = nColsLeft - 1;

    for (int r = 0; r < halfN; r++)
        for (int c = 0; c < n; c++) {
            if (c < nColsLeft || c >= n - nColsRight
                    || (c == nColsLeft && r == nColsLeft)) {

                if (c == 0 && r == nColsLeft)
                    continue;

                int tmp = result[r][c];
                result[r][c] = result[r + halfN][c];
                result[r + halfN][c] = tmp;
            }
        }

    return result;
}

int main(){

    int n;
    cin>>n;
    if (n%2==1){
        int **matrice=generate_odd_square(n);
        for (int i=0; i<n; i++){
            for (int j=0; j<n; j++)
                cout<<matrice[i][j]<<" ";
            cout<<endl;
        }
    }
    else
    if (n%4==0)
        generate_double_even_square(n);
    else{
        int **matrice=generate_single_even_square(n);
        for (int i=0; i<n; i++){
            for (int j=0; j<n; j++)
                cout<<matrice[i][j]<<" ";
            cout<<endl;
        }
    }
    return 0;
}

0 个答案:

没有答案