N*N 棋盘格子查找:同一行、同一列、同一对角线上的格子位置

本程序接收三个自然数 N, i, j,表示一个 N*N 格的棋盘中第 i 行第 j 列的格子,并输出与该格子同行、同列、同一对角线的所有格子的位置。

输入: 一行,三个自然数 N, i, j, 相邻两个数之间用单个空格隔开。1<=N<=10。

输出: 四行: 第一行:从左到右输出同一行格子位置; 第二行:从上到下输出同一列格子位置; 第三行:从左上到右下输出同一对角线格子位置; 第四行:从左下到右上输出同一对角线格子位置。

其中每个格子位置用如下格式输出:(x,y),x为行号,y为列号,采用英文标点,中间无空格。 相邻两个格子位置之间用单个空格隔开。

样例1: 输入 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)

C++ 代码:

#include <iostream>
#include <string>
using namespace std;

int main() {
    int N, i, j;
    cin >> N >> i >> j;

    // 输出同一行格子位置
    for (int col = 1; col <= N; col++) {
        cout << '(' << i << ',' << col << ')';
    }
    cout << endl;

    // 输出同一列格子位置
    for (int row = 1; row <= N; row++) {
        cout << '(' << row << ',' << j << ')';
    }
    cout << endl;

    // 输出左上到右下对角线上的格子位置
    int startRow = i - min(i - 1, j - 1);
    int startCol = j - min(i - 1, j - 1);
    int endRow = i + min(N - i, N - j);
    int endCol = j + min(N - i, N - j);
    for (int row = startRow, col = startCol; row <= endRow && col <= endCol; row++, col++) {
        cout << '(' << row << ',' << col << ')';
    }
    cout << endl;

    // 输出左下到右上对角线上的格子位置
    startRow = i + min(N - i, j - 1);
    startCol = j - min(N - i, j - 1);
    endRow = i - min(i - 1, N - j);
    endCol = j + min(i - 1, N - j);
    for (int row = startRow, col = startCol; row >= endRow && col <= endCol; row--, col++) {
        cout << '(' << row << ',' << col << ')';
    }
    cout << endl;

    return 0;
}

原文地址: https://www.cveoy.top/t/topic/p5on 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录