20200921--同行列对角线的格(奥赛一本通P89 2 二维数组)
输入三个自然数n,i,j(1<=i<=n,1<=j<=n),输出在一个n*n格的棋盘中(行列均从1开始编号),与格子(i,j)同行,同列,同一对角线的所有格子的位置。
如:n=4,i=2,j=3表示了棋盘中的第二行第三列的格子,如下图:
输入样例:n=4 x=2 y=3
输出样例:
(2,1) (2,2) (2,3) (2,4)
(1,3) (2,3) (3,3) (4,4)
(4,1) (2,3) (3,2) (1,4)
(1,2) (2,3) (3,3)
思路:先输出同行的格式位置,再输出同列格式位置;对角线(右上到左下)的规律是横+竖之和相等,如4+1=2+3=3+2=1+4,左上到右下则是横-竖相等。
#include <bits/stdc++.h>
using namespace std;
int n,x,y;//n 代表棋盘大小,x和y分别代表横向格子位置和竖向格子位置
int main()
{
cout<<"请输入棋盘的格数n,横竖都为n"<<endl;
cin>>n;
cout<<"请输入初始的x和y值,如(2,3)代表第二行第三列"<<endl;
cin>>x>>y;
for(int i=1;i<=n;i++)
{
cout<<"("<<x<<","<<i<<")";
}
cout<<endl;
for(int j=1;j<=n;j++)
{
cout<<"("<<j<<","<<y<<")";
}
cout<<endl;
for(int j=1;j<=n;j++)
{ for(int i=1;i<=n;i++)
{if(i+j==x+y)
{ cout<<"("<<i<<","<<j<<")"; }
}
}
cout<<endl;
return 0;
}