Решить на питон!
Замок имеет форму большого квадрата, составленного из N × N маленьких квадратиков. Внешние квадратики являются башнями, именно они играют основную роль в защите замка от неприятеля. Например, если замок имеет размер 4 × 4, то у него 12 башен (смотрите второй рисунок, башни на нем выделены серым цветом).
Замок охраняют K полков, которые необходимо разместить по башням. В одной башне можно разместить несколько полков, но при этом в каждой башне должен находиться хотя бы один полк, иначе неприятель легко захватит эту башню. Если все башни защищены, то неприятель выбирает для атаки одну из четырех сторон замка, которую защищает наименьшее число полков (то есть суммарное число полков во всех башнях данной стороны квадрата минимально).
Определите, как нужно разместить полки для наилучшей защиты замка.
#include <stdio.h>
#include <windows.h>
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int const n=3;
int mas[n][n];
int sum1, sum2;
bool magik;
for (int i=0; i<n; i++)
for (int j=0; j<n; j++)
{
printf("mas[%d][%d] = ", i+1, j+1);
scanf("%d",&mas[ i ][ j ]);
}
printf("\nВведенная матрица:\n");
for (int i=0; i<n; i++)
{
for (int j=0; j<n; j++)
{
printf("%d ",mas[ i ][ j ]);
}
printf("\n");
}
sum1=0;
sum2=0;
for (int i = 0; i<n; i++)
{
sum1 += mas[ i ][ i ];
sum2 += mas[ i ][ n-1-i ];
}
printf("Сумма главной диагонали = %d\n", sum1);
printf("Сумма побочной диагонали = %d\n", sum2);
magik = true;
for (int i=0; i<n; i++)
{
if (sum1==sum2)
{
sum2=0;
for (int j=0; j<n; j++)
{
sum2 += mas[ i ][ j ];
}
} else { magik=false; break; }
}
if (magik==true)
{
for (int i=0; i<n; i++)
{
if (sum1==sum2)
{
sum2=0;
for (int j=0; j<n; j++)
{
sum2 += mas[ j ][ i ];
}
}
else { magik=false; break; }
}
}
if (magik==true)
printf("\nМатрица является магическим квадратом\n");
else
printf("\nМатрица не является магическим квадратом\n");
system("pause");
return 0;
}
N,M,D,N2,i,C,j,M2,k:integer;
begin
N:=0;D:=0;k:=0;
write('Введите N = ');Readln(N);
write('Введите M = ');Readln(M);
For i:= 1 to M do begin
M2:=1;
For N2:=i downto 1 do begin
if M2<=N then begin
mas[M2,N2]:=k;
k:=k+1;
M2:=M2+1;
end;
end;
end;
//после побочной диагонали
For D:=2 to N do begin
M2:=D;
For N2:=M downto 1 do begin
IF (M2<=N) and (N2<=M) then begin
mas[M2,N2]:=k;
k:=k+1;
M2:=M2+1;
end;
end;
end;
For i:=1 to N do begin Writeln();
for j:=1 to M do
write(mas[i,j],' ');
end;
end.