#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
#include <time.h>
#include <math.h>
#define width 9
#define height 9
char mas[height][width];
char pmas[height][width];
void show()
{
int i,j;
char k;
for(i = 0,k=49;i < height/3;i++)
{
if( i == 1) k=52;
if( i == 2) k=55;
for(j = 0;j < width;j++,k++)
{
if(k>57) k=49;
mas[i][j] = k;
}
}
for(i = 3,k=50;i > height/3,i<(height/3)*2;i++)
{
if( i == 4)k=53;
if( i == 5) k=56;
for(j = 0;j < width;j++,k++)
{
if(k>57) k=49;
mas[i][j] = k;
}
}
for(i = 6,k=51;i > (height/3)*2,i < height;i++)
{
if( i == 7)k=54;
if( i == 8) k=57;
for(j = 0;j < width;j++,k++)
{
if(k>57) k=49;
mas[i][j] = k;
}
}
}
void PM()
{
int i,j;
for(i = 0;i < height;i++)
for(j = 0;j < width;j++)
pmas[i][j] = mas[i][j];
}
int PP(int x,int y)
{
if(pmas[y-1][x-1] == ' ')
return 1;
else return 0;
}
void peres()
{
int i,j,k,o=0,p,g,l=1;
char ch;
//Перестановка первых трех строк
do
{
for(i = 0;i < height/3;i++)
{
h1:
p = rand() % height/3;
if(p != i)
for(j = 0;j < width;j++)
{
ch = mas[i][j];
mas[i][j] = mas[p][j];
mas[p][j] = ch;
}
else goto h1;
o++;
}
}while(o <= 5);
o = 0;
//Перестановка вторых трех строк
do
{
for(i = height/3;i < (height/3)*2;i++)
{
h2:
p = rand()% ((height/3)*2);
if(p >= height/3 && p != i)
for(j = 0;j < width;j++)
{
ch = mas[i][j];
mas[i][j] = mas[p][j];
mas[p][j] = ch;
}
else goto h2;
}
o++;
}while(o <= 5);
o = 0;
//Перестановка последних трех строк
do
{
for(i = (height/3)*2;i < height;i++)
{
h3:
p = rand()%height;
if(p >= (height/3)*2 && p != i)
for(j = 0;j < width;j++)
{
ch = mas[i][j];
mas[i][j] = mas[p][j];
mas[p][j] = ch;
}
else goto h3;
}
o++;
}while(o != 5);
o = 0;
//Перестановка первых трех столбцов
do
{
for(j = 0;j < width/3;j++)
{
h4:
p = rand()% height/3;
if(p != j)
for(i = 0;i < height;i++)
{
ch = mas[i][j];
mas[i][j] = mas[i][p];
mas[i][p] = ch;
}
else goto h4;
}
o++;
}while(o != 5);
o = 0;
//Перестановка вторых трех столбцов
do
{
for(j = width/3;j < ((width/3)*2) ;j++)
{
h5:
p = rand()% ((height/3)*2);
if(p != j && p >= height/3)
for(i = 0;i < height;i++)
{
ch = mas[i][j];
mas[i][j] = mas[i][p];
mas[i][p] = ch;
}
else goto h5;
}
o++;
}while(o != 5);
o = 0;
//Перестановка последних трех столбцов
do
{
for(j = ((width/3)*2);j < width;j++)
{
h6:
p = rand()%height;
if(p != j && p >= ((height/3)*2))
for(i = 0;i < height;i++)
{
ch = mas[i][j];
mas[i][j] = mas[i][p];
mas[i][p] = ch;
}
else goto h6;
}
o++;
}while(o != 5);
}
void sterka(int n)
{
int l = 1, p,k;
do
{
ch:
p = rand()%9;
k = rand()%9;
if(mas[p][k] == 0)
goto ch;
else
mas[p][k] = ' ';
l++;
}while(l < n);
}
//проверка на то,есть ли куда ставить цифру
int prov()
{
int i,j,l=0;
for(i = 0;i < height;i++)
for(j = 0;j < width;j++)
if(mas[i][j] == ' ')
l++;
if(l == 0)
return 1;
else return 0;
}
//Проверка на то,правильно заполнили судоку
int pod()
{
int i,j,l = 0,k;
for(i = 0;i < height;i++)
{
k = 0;
for(j = 0;j < width;j++)
{
k += mas[i][j];
if(k == 4293 || k == 477)
l++;
}
}
if(l == 9)
return 1;
else return 0;
}
//Вывод массива
void init()
{
int i,j;
for(i = 0;i < height;i++)
{
for(j = 0;j < width;j++)
{
if(j == 3 || j == 6)
printf("| %c ",mas[i][j]);
else
printf("%c ",mas[i][j]);
}
printf("\n");
if(i == 2 || i == 5)
puts("_____________________");
}
}
int main()
{
long int f = 0;
srand(time(NULL));
int key;
int x,y,k,z,l,n;
show();
kj:
puts("Slojnost':");
puts("|-----------|");
puts("| 1:Essy |");
puts("|-----------|");
puts("| 2:Normal |");
puts("|-----------|");
puts("| 3:Hard |");
puts("|-----------|");
l = getch();
if(l == '1')
n = 15;
else if(l == '2')
n = 25;
else if(l == '3')
n = 40;
else goto kj;
peres();
sterka(n);
PM();
do
{
if(prov() == 0)
{
system("cls");
init();
puts("1:New Element");
puts("2: Delet Element");
z = getch();
switch(z)
{
case '1':
puts("Wiberi stroku");
scanf("%d",&y);
puts("Wiberi stolbez");
scanf("%d",&x);
puts("Shto stavit'?");
scanf("%d",&key);
if(mas[y-1][x-1] == ' ')
{
key += 48;
mas[y-1][x-1] = key;
}
else puts("Eror");
break;
case '2':
puts("Wiberi stroku");
scanf("%d",&y);
puts("Wiberi stolbez");
scanf("%d",&x);
if(PP(x,y) == 1)
{
key += 48;
mas[y-1][x-1] = ' ';
}
else puts("Error");
break;
case 27:return 0;
}
}
else
{
if(pod() == 1)
{
puts("Winner");
break;
}
else
{
puts("Looser");
break;
}
}
}while(1);
return 0;
}