동적배열 연습
재귀함수 연습
#include <iostream>
using namespace std;
int** paper;
int minus_one = 0, zero = 0, plus_one = 0;
int input(int lower, int upper)
{
//cout << "input()" << endl;
int A;
while (1)
{
cin >> A;
if (A >= lower && A <= upper)
{
break;
}
else
{
;
}
}
return A;
}
void input_paper(int N)
{
//cout << "input_paper()\n";
int i, j;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
paper[i][j] = input(-1, 1);
}
}
/*for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
cout << paper[i][j] << " ";
}
cout << "\n";
}*/
return;
}
void cut_paper(int A, int B, int C)
{
bool cut = false;
int i, j, k;
int temp = paper[A][B];
for (i = A; i < A + C; i++)
{
for (j = B; j < B + C; j++)
{
if (paper[i][j] != temp)
{
cut = true;
break;
}
else
{
;
}
}
if (cut == true)
{
cut = true;
break;
}
else
{
;
}
}
if (cut == true)
{
/*
1 2 3
4 5 6
7 8 9
*/
k = C / 3;
cut_paper(A, B, k);//1
cut_paper(A, B + k, k);//2
cut_paper(A, B + k * 2, k);//3
cut_paper(A + k, B, k);//4
cut_paper(A + k, B + k, k);//5
cut_paper(A + k, B + k * 2, k);//6
cut_paper(A + k * 2, B, k);//7
cut_paper(A + k * 2, B + k, k);//8
cut_paper(A + k * 2, B + k * 2, k);//9
}
else//cout == false
{
if (temp == -1)
{
minus_one++;
}
else if (temp == 0)
{
zero++;
}
else
{
plus_one++;
}
}
return;
}
void find_result(int N)
{
cut_paper(0, 0, N);
cout << minus_one << "\n" << zero << "\n" << plus_one << "\n";
return;
}
int main(void)
{
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int N, i;
N = input(1, 3000);
paper = new int* [N];
for (i = 0; i < N; i++)
{
paper[i] = new int[N];
}
input_paper(N);
find_result(N);
for (i = 0; i < N; i++)
{
delete[] paper[i];
}
delete[] paper;
return 0;
}