【原创】同行列对角线的格子
传送门 http://noi.openjudge.cn/ch0108/02/
做二维数组的题目,记住下标和行列是差1的,要不然会死的很惨。
我们观察。
我们假设,输入的行列为x和y,下标为i和j。
如果i=x,说明在同一行。同理,如果j=y,说明在同一列。
问题来了,如果在同一对角线,怎样判断?
我们观察一下。左上到右下的对角线,应该是这样子的。
观察数据:
(1,2)(2,3)(3,4)
我们可以看到,每次i和j都+1,所以,i-x和j-y应该是相同的。(如果是负数也是相同,不需要abs)
我们同理继续观察,右上到左下的对角线。
(1,4)(2,3)(3,2)(4,1)
每一次,i+1,j-1,所以,x-i和j-y相同,i-x则和y-j相同。
代码如下:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n,x,y;
cin>>n>>x>>y;
--x;--y;
int a[n][n];
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==x)printf("(%d,%d) ",i+1,j+1);
}
}
cout<<endl;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(j==y)printf("(%d,%d) ",i+1,j+1);
}
}
cout<<endl;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i-x==j-y || x-i==y-j)printf("(%d,%d) ",i+1,j+1);
}
}
cout<<endl;
for(int i=n-1;i>=0;i--){
for(int j=n-1;j>=0;j--){
if(i-x==y-j || x-i==j-y)printf("(%d,%d) ",i+1,j+1);
}
}
}
赞 (0)