1120:同行列对角线的格时间限制: 1000 ms 内存限制: 65536 KB 提交数: 52960 通过数: 22689 【题目描述】输入三个自然数n,i,j(1≤i≤n,1≤j≤n),输出在一个n×n格的棋盘中(行列均从1开始编号), 与格子(i,j)同行、同列、同一对角线的所有格子的位置。 如:n=4,i=2,j=3表示了棋盘中的第二行第三列的格子, 当n=4,i=2,j=3时,输出的结果是:
【输入】一行,三个自然数n,i,j,相邻两个数之间用单个空格隔开(1≤n≤10)。 【输出】第一行:从左到右输出同一行格子位置; 第二行:从上到下输出同一列格子位置; 第三行:从左上到右下输出同一对角线格子位置; 第四行:从左下到右上输出同一对角线格子位置。 其中每个格子位置用如下格式输出:(x,y),x为行号,y为列号,采用英文标点,中间无空格。相邻两个格子位置之间用单个空格隔开。 【输入样例】4 2 3 【输出样例】(2,1) (2,2) (2,3) (2,4)
(1,3) (2,3) (3,3) (4,3)
(1,2) (2,3) (3,4)
(4,1) (3,2) (2,3) (1,4)
|
#include<iostream> #include<cmath> #include<cstring> using namespace std; int main() { int x,y,i,k,j,n,sum; scanf("%d",&n); scanf("%d %d",&x,&y); for(j=1;j<=n;j++)//行的 printf("(%d,%d) ",x,j); printf("\n"); for(i=1;i<=n;i++)//列的,这两个好弄 printf("(%d,%d) ",i,y); printf("\n"); //这下面的比较复杂,弄了好久 if(x>y){ for(i=1,k=x-y+1;k<=n;i++,k++) printf("(%d,%d) ",k,i); printf("\n"); if(x+y>n){ sum=x+y-n; for(i=sum,k=y+x-sum;k>=sum;i++,k--) printf("(%d,%d) ",k,i);} else for(i=1,k=y+x-1;k>=1;i++,k--) printf("(%d,%d) ",k,i); printf("\n"); } else if(x<y){ for(i=1,k=y-x+1;k<=n;i++,k++) printf("(%d,%d) ",i,k); printf("\n"); if(x+y>n){ sum=x+y-n; for(i=sum,k=y+x-sum;k>=sum;i++,k--) printf("(%d,%d) ",k,i);} else for(i=1,k=y+x-1;k>=1;i++,k--) printf("(%d,%d) ",k,i); printf("\n"); } else { for(i=1;i<=n;i++) printf("(%d,%d) ",i,i); printf("\n"); if(x+y>n){ sum=x+y-n; for(k=sum,i=x+y-sum;i>=sum;i--,k++) printf("(%d,%d) ",i,k); } else if(x+y<n) for(k=1,i=x+y-1;i>=1;i--,k++) printf("(%d,%d) ",k,i); if(x+y==n) for(k=1,i=n-1;i>=1;i--,k++) printf("(%d,%d) ",i,k); printf("\n"); } return 0; } |