【原创】同行列对角线的格子

传送门 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相同。
代码如下:
  1. #include<bits/stdc++.h>

  2. using namespace std;

  3. int main(){

  4. int n,x,y;

  5. cin>>n>>x>>y;

  6. --x;--y;

  7. int a[n][n];

  8. for(int i=0;i<n;i++){

  9. for(int j=0;j<n;j++){

  10. if(i==x)printf("(%d,%d) ",i+1,j+1);

  11. }

  12. }

  13. cout<<endl;

  14. for(int i=0;i<n;i++){

  15. for(int j=0;j<n;j++){

  16. if(j==y)printf("(%d,%d) ",i+1,j+1);

  17. }

  18. }

  19. cout<<endl;

  20. for(int i=0;i<n;i++){

  21. for(int j=0;j<n;j++){

  22. if(i-x==j-y || x-i==y-j)printf("(%d,%d) ",i+1,j+1);

  23. }

  24. }

  25. cout<<endl;

  26. for(int i=n-1;i>=0;i--){

  27. for(int j=n-1;j>=0;j--){

  28. if(i-x==y-j || x-i==j-y)printf("(%d,%d) ",i+1,j+1);

  29. }

  30. }

  31. }

(0)

相关推荐