Q:

Задача с двумерным массивом

Суть задачи:
Дан двумерный массив, размер задан в файле, массив квадратный, со стороной size элементов (2 на 2, 3 на 3 и т.д.).  Найти сумму элементов двумерного массива по периметру и по главным диагоналям.   

Пример данных и ответа:
Ввод :
4

0 1 2 3

4 5 6 7

8 9 0 1

2 3 4 5

Вывод :
60

Вот мой код, решение вроде верное, но чуть меньше половины тестов завалено, где ошибка и как её исправить?   
#include <fstream>
using namespace std;
int main() {

    ifstream inp;
    ofstream otp;
    inp.open("input.txt");
    otp.open("output.txt");

    int size = 0, answer = 0, N[100][100], P = 0, d1 = 0, d2 = 0, temp = 0;

    inp >> size;

    if (size % 2 ! = 0) {
        temp = (size - 1) / 2;
    }

    for (int x = 0; x < size; x++) {
        for (int i = 0; i < size; i++) {
            inp >> N[x][i];
            if (x == 0 || x == size - 1) {
                if (i > 0 && i < size - 1) {
                    P += N[x][i];
                }
            }
            if (i == 0 || i == size - 1) {
                if (x > 0 && x < size - 1) {
                    P += N[x][i];
                }
            }
            if (size % 2 == 0) {
                if (x == i && x > 0 && x < size - 1) {
                    d1 += N[x][i];
                }
                if (x + i == size - 1 && x > 0 && i > 0) {
                    d2 += N[x][i];
                }
            }
            else {
                if (x == i && x > 0 && x < size - 1 && x ! = temp) {
                    d1 += N[x][i];
                }
                if (x + i == size - 1 && x > 0 && i > 0 && x ! = i) {
                    d2 += N[x][i];
                }
            }
        }
    }

    answer += P + d1 + d2 + N[temp][temp] + N[0][0] + N[size - 1][size - 1] + N[size - 1][0] + N[0][size - 1];

    otp << answer;

    return 0;
}

A:

inp >> t;
if (x == 0 || x == size - 1 || y == 0 || y == size - 1 || x==y || x+y==size-1)
    sum += t;

