C++ 棋盘格子位置输出算法
C++ 棋盘格子位置输出算法
题目描述: 输入三个自然数 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 时,输出的结果是:
(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)
左下到右上对角线上的格子的位置
输入: 一行,三个自然数 N, i, j, 相邻两个数之间用单个空格隔开。1<=N<=10。
输出: 四行: 第一行:从左到右输出同一行格子位置; 第二行:从上到下输出同一列格子位置; 第三行:从左上到右下输出同一对角线格子位置; 第四行:从左下到右上输出同一对角线格子位置。
其中每个格子位置用如下格式输出:(x,y), x 为行号,y 为列号,采用英文标点,中间无空格。 相邻两个格子位置之间用单个空格隔开。
C++ 代码:
#include <iostream>
using namespace std;
int main() {
int N, i, j;
cin >> N >> i >> j;
// 同一行
for(int k=1; k<=N; k++) {
cout << '(' << i << ',' << k << ')';
if(k != N) {
cout << ' ';
}
}
cout << endl;
// 同一列
for(int k=1; k<=N; k++) {
cout << '(' << k << ',' << j << ')';
if(k != N) {
cout << ' ';
}
}
cout << endl;
// 左上到右下对角线
int startRow = i - min(i, j);
int startCol = j - min(i, j);
while(startRow <= N && startCol <= N) {
cout << '(' << startRow << ',' << startCol << ')';
startRow++;
startCol++;
if(startRow <= N && startCol <= N) {
cout << ' ';
}
}
cout << endl;
// 左下到右上对角线
startRow = i + min(N-i, j-1);
startCol = j - min(N-i, j-1);
while(startRow >= 1 && startCol <= N) {
cout << '(' << startRow << ',' << startCol << ')';
startRow--;
startCol++;
if(startRow >= 1 && startCol <= N) {
cout << ' ';
}
}
return 0;
}
原文地址: https://www.cveoy.top/t/topic/p5mX 著作权归作者所有。请勿转载和采集!