Задачи про ходы ферзя
Решаю задачу. Получил решение, но пишет "программа выдает неверный ответ" Ходы ферзя На шахматной доске стоит ферзь. Отметьте положение ферзя на доске и все клетки, которые бьет ферзь. Клетку, где стоит ферзь, отметьте буквой "Q", клетки, которые бьет ферзь, отметьте символами "*", остальные клетки заполните точками.
Входные данные
В двух строках входного файла заданы два числа — координаты нахождения ферзя. Числа во входном файле натуральные, не превосходящие 8 по значению.
Выходные данные
Выведите на экран изображение доски так, как это показано в примере. Обратите внимание, что символы в одной строке разделены пробелом.
#include <string>
using namespace std;
int main()
{
char d[8][8];
for(int i=0;i<=7;i++)
{
for(int j=0;j<=7;j++)
{
d[i][j]='.';
}
}
int a,b;
cin>>a>>b;
d[a-1][b-1]='Q';
for(int i=0;i<=7;i++)
{
if(i==b-1)
{
}
else
{
d[a-1][i]='*';
}
}
for(int i=0;i<=7;i++)
{
if(i==a-1)
{
}
else
{
d[i][b-1]='*';
}
}
int j=b-1;
for(int i=a;i<=7;i++)
{
j+=1;
if(j==7)
{
d[i][j]='*';
break;
}
else
{
d[i][j]='*';
}
}
j=b-1;
for(int i=a-2;i>=0;i--)
{
j+=1;
if(j==7)
{
d[i][j]='*';
break;
}
else
{
d[i][j]='*';
}
}
j=b-1;
for(int i=a-2;i>=0;i--)
{
j-=1;
if(j==0)
{
d[i][j]='*';
break;
}
else
{
d[i][j]='*';
}
}
j=b-1;
for(int i=a;i<=7;i++)
{
j-=1;
if(j==0)
{
d[i][j]='*';
break;
}
else
{
d[i][j]='*';
}
}
for(int i=0;i<=7;i++)
{
for(int j=0;j<=7;j++)
{
cout<<d[i][j]<<" ";
}
cout<<endl;
}
}```
Ответы (1 шт):
Автор решения: Harry
→ Ссылка
Посмотрите этот код:
#include <string>
#include <iostream>
#include <cassert>
using namespace std;
int main()
{
char d[8][8];
for(int i = 0; i < 8; ++i)
for(int j = 0; j < 8; ++j)
d[i][j]='.';
int a, b;
cin >> a >> b;
--a; --b;
assert(a >= 0 && a < 8 && b >= 0 && b < 8);
for(int i = 0; i < 8; ++i)
for(int j = 0; j < 8; ++j)
if (abs(i-a)==abs(j-b) || i == a || j == b) d[i][j] = '*';
d[a][b]='Q';
for(int i = 0; i < 8; ++i)
{
for(int j = 0; j < 8; ++j)
cout << d[i][j] << " ";
cout << endl;
}
}