3 条题解
-
4
这道题目要求输出在一个N×N格的棋盘中,与给定格子(i,j)同行、同列、同一对角线的所有格子的位置。
我们可以分别输出四组位置:
- 同一行的格子位置:我们只需要固定行号i,将列号从1到N遍历即可。
- 同一列的格子位置:我们只需要固定列号j,将行号从1到N遍历即可。
- 同一对角线(左上到右下)的格子位置:我们将行号与列号的差值作为判断条件。具体地,当行号与列号的差值相等于(i-j)时,这些格子处于同一对角线上。
- 同一对角线(左下到右上)的格子位置:我们将行号与列号的和作为判断条件。具体地,当行号与列号的和相等于(i+j)时,这些格子处于同一对角线上。
PY:
n, x, y = map(int, input().split()) # 同一行格子位置 print(" ".join([f"({x},{i})" for i in range(1, n+1)])) # 同一列格子位置 print(" ".join([f"({i},{y})" for i in range(1, n+1)])) # 同一对角线(左上到右下)格子位置 print(" ".join([f"({i},{j})" for i in range(1, n+1) for j in range(1, n+1) if i-j == x-y])) # 同一对角线(左下到右上)格子位置 print(" ".join([f"({i},{j})" for i in range(n, 0, -1) for j in range(1, n+1) if i+j == x+y]))
C++:
#include <iostream> using namespace std; int main() { int n, x, y; cin >> n >> x >> y; // 同一行格子位置 for (int i = 1; i <= n; i++) { cout << "(" << x << "," << i << ") "; } cout << endl; // 同一列格子位置 for (int i = 1; i <= n; i++) { cout << "(" << i << "," << y << ") "; } cout << endl; // 同一对角线(左上到右下)格子位置 for (int i = 1; i <= n; i++) { for (int j = 1; j <= n; j++) { if (i - j == x - y) { cout << "(" << i << "," << j << ") "; } } } cout << endl; // 同一对角线(左下到右上)格子位置 for (int i = n; i >= 1; i--) { for (int j = 1; j <= n; j++) { if (i + j == x + y) { cout << "(" << i << "," << j << ") "; } } } cout << endl; return 0; }
这样,我们根据题目要求分别输出了同一行、同一列、同一对角线(左上到右下)和同一对角线(左下到右上)的格子位置。每个位置的格子都用"(x,y)"的格式输出,并用空格隔开。这里我们利用行号和列号的关系来计算每个格子的位置,然后判断位置是否有效(在棋盘范围内),并将有效的格子位置输出。
代码就是工具,重要的是思想
-
0
yasuo👀️
利用逆推,从头一步步靠规律完成输出
#include <iostream> int main(){ int n,i,j,x,y;std::cin>>n>>i>>j;x=i,y=j; for(int j=1;j<=n;j++) std::cout<<"("<<i<<","<<j<<") "; std::cout<<"\n"; for(int i=1;i<=n;i++) std::cout<<"("<<i<<","<<j<<") "; std::cout<<"\n"; while(1){if(x<=1||y<=1) break;x--,y--;} while(1){if(x>n||y>n) break;std::cout<<"("<<x<<","<<y<<") ";x++,y++;}std::cout<<"\n"; x=i,y=j;while(1){if(x>=n||y<=1) break;x++,y--;} while(1){if(x<1||y>n) break;std::cout<<"("<<x<<","<<y<<") ";x--,y++;} return 0;}
-
0
#include<iostream> #include<cstdio> using namespace std; int main() { int n,x,y; int i,j; cin>>n;//输入棋盘大小n cin>>x>>y;//输入棋子所在行列(x,y) for(i=1;i<=n;i++)//输出同一行的位置 printf("(%d,%d) ",x,i); cout<<endl; for(i=1;i<=n;i++)//输出同一列的位置 printf("(%d,%d) ",i,y); cout<<endl; for(i=1;i<=n;i++)//输出左上到右下对角线的位置 for(j=1;j<=n;j++) if(x-y==i-j) printf("(%d,%d) ",i,j); cout<<endl; for(i=n;i>=1;i--)//输出左下到右上对角线的位置 for(j=n;j>=1;j--) if(x+y==i+j) printf("(%d,%d) ",i,j); cout<<endl; return 0; }
- 1
信息
- ID
- 202
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 4
- 标签
- 递交数
- 120
- 已通过
- 58
- 上传者