даже не знаю в чем может быть ошибка ((( ,в массиве 1-это ферзы, 2-куда смогут перешагнуть (тоесть диагонали, верт и т. п.) 0-только в начале, ничего не значит. Она сама должна заполнить 1 и 2
public class Print {
public static void main(String[] args){
int[][] bak=new int[7][7];
bak[0][0]=2;
for(int a1=0;a1<7;a1++)
{
for(int a2=0;a2<7;a2++)
{
if(bak[a1][a2]==0&bak[a1][a2+1]!=2)
{
bak[a1][a2]=1;
for(int a33=a1;a33<7;a33++)
{
bak[a33][a2]=2;
}
for(int a3=0,a4=a2;a3<7;a3++,a4++)
{
if(bak[a4][a4]!=1){bak[a4][a4]=2;if(a4>7){break;}}
}
for(int a3=0,a4=a2,a5=a2;a3<8;a3++,a4++,a5=a5-1)
{
if(bak[a4][a5]!=1){bak[a4][a5]=2;if(a4>7|a5<0){break;}}
}
System.out.print(bak[a1][a2]+" ");
}
if(bak[a1][a2]!=1)
{
bak[a1][a2]=2;
}
System.out.print(bak[a1][a2]+" ");
}
System.out.println();
}
}
}
Java
нужно поставить 8 ферзей так что бы они не смогли атаковать друг-друга (не пересекаться по диагонлям горизот. и вертик.)
Всё намного проще. Хранить поле вообще не требуется - только положение ферзей.
Проверить, что ферзи (x1, y1) и (x2, y2) бьют друг друга:
x1 == x2 /* в одном столбце */
|| y1 == y2 /* в одной строке */
|| x1+y1 == x2+y2 /* на одной диагонали, параллельной побочной */
|| x1-y1 == x2-y2 /* на одной диагонали, параллельной главной */
Перепишем два последних условия:
x1 + y1 == x2 + y2 || x1 - y1 == x2 - y2 =>
x1 - x2 == y2 - y1 || x1 - x2 == y1 - y2 =>
abs(x1 - x2) == abs(y1 - y2)
Т. к. два ферзя не могут занимать одну строку, то для хранения достаточно одномерного массива:
int cols[] = new int[8];
cols[y] == x - проверка что ферзь в строке y занимает столбец x.
Тогда проверка того, что ферзи бьют друг друга будет выглядеть (y1 всегда не равно y2):
cols[y1] == cols[y2] || abs(cols[y1] - cols[y2]) == abs(y1 - y2)
Набросок программы:
int[] cols;
static void queens(int row = 0) {
for(int x = 0; x < 8; ++x) {
boolean flg = false; // флаг "ферзь бьёт"
for(int y = 0; y < row && !flg; ++y) { flg = cols[y] == x || row - y == abs(x - cols[y]); }
if (flg) { continue; }
cols[row] = x;
if(row < 7) { queens(row + 1); } else { System.out.println(cols); }
}
}
public static void main(String[] args){
cols = new int[8];
queens();
}
Проверить, что ферзи (x1, y1) и (x2, y2) бьют друг друга:
x1 == x2 /* в одном столбце */
|| y1 == y2 /* в одной строке */
|| x1+y1 == x2+y2 /* на одной диагонали, параллельной побочной */
|| x1-y1 == x2-y2 /* на одной диагонали, параллельной главной */
Перепишем два последних условия:
x1 + y1 == x2 + y2 || x1 - y1 == x2 - y2 =>
x1 - x2 == y2 - y1 || x1 - x2 == y1 - y2 =>
abs(x1 - x2) == abs(y1 - y2)
Т. к. два ферзя не могут занимать одну строку, то для хранения достаточно одномерного массива:
int cols[] = new int[8];
cols[y] == x - проверка что ферзь в строке y занимает столбец x.
Тогда проверка того, что ферзи бьют друг друга будет выглядеть (y1 всегда не равно y2):
cols[y1] == cols[y2] || abs(cols[y1] - cols[y2]) == abs(y1 - y2)
Набросок программы:
int[] cols;
static void queens(int row = 0) {
for(int x = 0; x < 8; ++x) {
boolean flg = false; // флаг "ферзь бьёт"
for(int y = 0; y < row && !flg; ++y) { flg = cols[y] == x || row - y == abs(x - cols[y]); }
if (flg) { continue; }
cols[row] = x;
if(row < 7) { queens(row + 1); } else { System.out.println(cols); }
}
}
public static void main(String[] args){
cols = new int[8];
queens();
}
Алишерка ...
мне раньше говорили что ее можно на одномерном массиве сделать, даже не думал о таком))))
Выбор алгоритма усложнил решение. Попробуй расставлять ходами шахматного коня.
Алишерка ...
я пытался, но если начать с 1А, то ничего не получается, поэтому в массиве бак (0)(0) это двойка
Нет такого языка
Алишерка ...
жалко вас ((
#include тут стрелочка iostream>
#include тут стрелочка vector>
#include тут стрелочка algorithm>
int main()
{
int N, Mod;
std::vector < int > L;
std::cin >> N;
Mod = N % 12;
for ( int x = 2; x <= N; x += 2 )
L.push_back( x );
if ( Mod == 3 || Mod == 9 )
{
L.push_back( 2 );
L.erase( L.begin() );
}
if ( Mod == 8 )
{
std::vector < int > V;
for ( int x = 1; x <= N; x += 2 )
V.push_back( x );
for ( int i = 1; i < V.size(); i += 2 )
std::swap( V.at( i ), V.at( i - 1 ) );
for ( int i = 0; i < V.size(); ++i )
L.push_back( V.at( i ) );
}
else
for ( int x = 1; x <= N; x += 2 )
L.push_back( x );
if ( Mod == 2 && N >= 3 )
{
std::swap( *std::find( L.begin(), L.end(), 1 ), *std::find( L.begin(), L.end(), 3 ) );
if ( N >= 5 )
{
L.erase( std::find( L.begin(), L.end(), 5 ) );
L.push_back( 5 );
}
}
if ( Mod == 3 || Mod == 9 )
{
L.erase( std::find( L.begin(), L.end(), 1 ) );
L.push_back( 1 );
L.erase( std::find( L.begin(), L.end(), 3 ) );
L.push_back( 3 );
}
for ( int i = 0; i < L.size(); ++i )
std::cout << L.at( i ) << " ";
return 0;
}
#include тут стрелочка vector>
#include тут стрелочка algorithm>
int main()
{
int N, Mod;
std::vector < int > L;
std::cin >> N;
Mod = N % 12;
for ( int x = 2; x <= N; x += 2 )
L.push_back( x );
if ( Mod == 3 || Mod == 9 )
{
L.push_back( 2 );
L.erase( L.begin() );
}
if ( Mod == 8 )
{
std::vector < int > V;
for ( int x = 1; x <= N; x += 2 )
V.push_back( x );
for ( int i = 1; i < V.size(); i += 2 )
std::swap( V.at( i ), V.at( i - 1 ) );
for ( int i = 0; i < V.size(); ++i )
L.push_back( V.at( i ) );
}
else
for ( int x = 1; x <= N; x += 2 )
L.push_back( x );
if ( Mod == 2 && N >= 3 )
{
std::swap( *std::find( L.begin(), L.end(), 1 ), *std::find( L.begin(), L.end(), 3 ) );
if ( N >= 5 )
{
L.erase( std::find( L.begin(), L.end(), 5 ) );
L.push_back( 5 );
}
}
if ( Mod == 3 || Mod == 9 )
{
L.erase( std::find( L.begin(), L.end(), 1 ) );
L.push_back( 1 );
L.erase( std::find( L.begin(), L.end(), 3 ) );
L.push_back( 3 );
}
for ( int i = 0; i < L.size(); ++i )
std::cout << L.at( i ) << " ";
return 0;
}
програмируй на unity
Хирург 108
Нет такого языка
Похожие вопросы
- Нужно написать Java код на NetBeans IDE 8.2, пожалуйста
- Что такое MySQL и Redis и как поставить их на сервер в Майнкрафт, если это вообще возможно
- Как думаете, смогу ли я сдать ЕГЭ по информатике?
- В чем смысл задачи? Решение не надо, кода не надо, просто хочу понять, что нужно сделать, заранее спасибо
- Хочу написать программу -калькулятор .Через какой язык мне нужно писать ?/И как вообще писать ?
- Этот вопрос давно меня мучает. Почему в более мощных языках программирования нужно самому объявлять тип данной переменой
- Нужно ли хорошо знать математику Java программисту? На разных сайтах пишут по разному, одни пишут что матан только для..
- Всем привет. Помогите плз. Мне нужна помощь тех кто действительно хорошо знает Java т. к мне нужно выбрать один из курсов
- Тяжело ли будет создать компьютерную игру с хорошей графикой? Какой язык программирования для этого нужно учить ?
- Как правильно учить, есть книга например Java8 для начинающих, нужно ли что то записывать или же стараться