题目描述
在一个10行10列的棋盘上,有四颗棋子,需要你再增加一颗棋子,使得这五颗棋子连成一条连续的直线。
输入
输入包含一组测试数据,包括四行,每行是两个整数i和j(0<=i,j<=9),分别表示棋子的行和列。
输入保证再增加的棋子只有放在一个唯一的位置才能连成一条连续的直线
输出
输出包括一行,两个整数,表示增加的棋子的行和咧
样例输入 Copy
0 0
0 1
0 3
0 4
样例输出 Copy
0 2
题解:
枚举所有的起点然后每个起点向左、下、左下、右下四个方向计数,在放置的范围内如果已经放了四个且还可以在放一个那么就是答案(题目保证了答案唯一)
#include<bits/stdc++.h>
using namespace std;
bool v[11][11];
int a,b;
int main()
{
for(int i=1;i<=4;++i){
cin>> a>>b;
v[a][b]=1;
}
for(int i=0;i<=5;++i){
for(int j=0;j<9;++j){
int cnt =0;
for(int k=0;k<5;++k){
if(v[i+k][j]){
cnt++;
}else {
a= i+k;
b=j;
}
}
if(cnt == 4){
cout << a << " "<< b << endl;
return 0;
}
cnt =0;
for(int k=0;k<5;++k){
if(v[j][i+k]){
cnt++;
}else
{
a=j;
b=i+k;
}
}
if(cnt == 4){
cout << a << " "<< b << endl;
return 0;
}
}
}
for(int i=0;i<=5;++i){
for(int j=0;j<=5;++j){
int cnt =0;
for(int k=0;k<5;++k){
if(v[i+k][j+k]){
cnt ++;
} else {
a= i+k;
b= j+k;
}
}
if(cnt == 4){
cout << a << " "<< b<<endl;
return 0;
}
}
}
for(int i=4;i<=9;++i){
for(int j =0;j<=5;++j){
int cnt =0;
for(int k=0;k<5;++k){
if(v[i-k][j+k]){
cnt ++;
}else
{
a = i-k;
b= j+k;
}
}
if(cnt ==4){
cout << a<< " "<< b<<endl;
return 0;
}
}
}
return 0;
}