2026年【江苏“信息与未来”编程思维】真题及题解(T3:南京名片)

2026年【江苏"信息与未来"编程思维】真题及题解(T3:南京名片)

题目描述

Dr. X 要给南京展会设计巨幅广告,图案由两个大写字母 N、J 组成。给定一个正整数 n n n,表示字母的大小。你需要按照以下规则输出这两个字母,并且 两个字母之间恰好用一个空格隔开

  • 字母 N 由一个 n × n n \times n n×n 的方阵组成。第一列和最后一列需要涂黑,并且从左上角到右下角的主对角线也要涂黑。
  • 字母 J 由一个 n × n n \times n n×n 的方阵组成。第一行需要涂黑,中间那一列(即第 ⌊ n / 2 ⌋ + 1 \lfloor n/2 \rfloor + 1 ⌊n/2⌋+1 列)从第一行到最后一行也涂黑,最后一行从第一列到中间列也涂黑。
  • 涂黑的位置用星号 * 表示,其余位置为 空格 ,注意不是数值为 0 0 0 的 ASCII 字符。行末的空格不影响评分。
输入格式

输入一个正整数 n n n。

输出格式

输出 n n n 行,每行包含两个由单个空格隔开的字母图案。

输入输出样例 1
输入 1
复制代码
5
输出 1
复制代码
*   * *****
**  *   *
* * *   *
*  **   *
*   * ***
输入输出样例 2
输入 2
复制代码
3
输出 2
复制代码
* * ***
***  *
* * **
说明/提示
  • 当 n = 5 n = 5 n=5 时,需要分别构造大小为 5 × 5 5 \times 5 5×5 的字母 N、J,并按顺序输出,且相邻字母之间恰好保留一个空格。
  • 当 n = 3 n = 3 n=3 时,字母规模最小,更容易看出 N 的主对角线、J 的中间列和底边。
数据规模
  • 对于 60 % 60\% 60% 的数据,满足 n ≤ 10 n \le 10 n≤10。
  • 对于 100 % 100\% 100% 的数据,满足 3 ≤ n ≤ 50 3 \le n \le 50 3≤n≤50,且保证 n n n 为奇数。

思路分析

  1. 两个字母都画在 n × n n\times n n×n 的方阵上,所以每一行可以先画出字母 N 的 n 个字符,再输出一个空格,再画出字母 J 的 n 个字符。
  2. 使用 0 开始的下标:
    • 字母 N:
      • 第 0 列:j == 0
      • 最后一列:j == n-1
      • 主对角线:i == j
        满足上述任一条件就是 *,否则是空格。
    • 字母 J:
      • 第一行:i == 0
      • 中间列:中间列是第 n/2+1 列,0-based 下标为 n/2
      • 最后一行从第 0 列到中间列:i == n-1 && j <= n/2
        满足任一条件就是 *,否则是空格。
  3. 每行把 N 串、一个空格、J 串拼接后输出即可。

代码实现

cpp 复制代码
#include <bits/stdc++.h>
using namespace std;
int n;

int main() {
    cin >> n;

    int m = n / 2 + 1; //中间列

    for (int i = 0; i < n; i++) {
        string a, b;
        a.resize(n);
        b.resize(n);

        for (int j = 0; j < n; j++) {
            //N:边界/主对角线
            if (j == 0 || j == n - 1 || i == j) a[j] = '*'; else a[j] = ' '; 
            //J:顶行/中间列/底行左半
            if (i == 0 || j == m - 1 || (i == n - 1 && j <= m - 1)) b[j] = '*'; else b[j] = ' '; 
        }

        string s = a + " " + b;
        
        cout << s << '\n';
    }

    return 0;
}

功能分析

  • 输入正整数 n,计算出字母 J 的中间列位置。
  • 对每一行,分别生成字母 N 和字母 J 的当前行字符串。
  • 用单个空格连接两个字母的当前行,并去掉行末多余空格后输出。
  • 时间复杂度 O ( n 2 ) O(n^2) O(n2),空间复杂度 O(n)。

更多内容请关注专栏:信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转


【秘籍汇总】(完整csp信奥赛C++学习资料):

1、csp/信奥赛C++,完整信奥赛系列课程(永久学习):

https://edu.csdn.net/lecturer/7901 点击跳转

2、CSP信奥赛C++竞赛拿奖视频课:

https://edu.csdn.net/course/detail/40437 点击跳转

https://edu.csdn.net/course/detail/41081 点击跳转

3、csp信奥赛高频考点知识详解及案例实践:

CSP信奥赛C++动态规划:

https://blog.csdn.net/weixin_66461496/category_13096895.html点击跳转

CSP信奥赛C++标准模板库STL:

https://blog.csdn.net/weixin_66461496/category_13108077.html 点击跳转

信奥赛C++提高组csp-s知识详解及案例实践:

https://blog.csdn.net/weixin_66461496/category_13113932.html 点击跳转

4、csp信奥赛冲刺一等奖有效刷题题解:

信奥赛C++普及组CSP-J一等奖通关刷题题单及题解:

https://blog.csdn.net/weixin_66461496/category_12673810.html 点击跳转

信奥赛C++普及组csp-j初赛&复赛真题题解(持续更新): https://blog.csdn.net/weixin_66461496/category_12808781.html 点击跳转

信奥赛C++提高组csp-s初赛&复赛真题题解(持续更新):

https://blog.csdn.net/weixin_66461496/category_13125089.html 点击跳转

5、GESP C++考级真题题解:

GESP(C++ 一级+二级+三级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12858102.html 点击跳转

GESP(C++ 四级+五级+六级)真题题解(持续更新):https://blog.csdn.net/weixin_66461496/category_12869848.html 点击跳转

GESP(C++ 七级+八级)真题题解(持续更新):

https://blog.csdn.net/weixin_66461496/category_13117178.html 点击跳转

· 文末祝福 ·

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
int main(){
	cout<<"跟着王老师一起学习信奥赛C++";
	cout<<"    成就更好的自己!       ";
	cout<<"  csp信奥赛一等奖属于你!   ";
	return 0;
}