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 为奇数。
思路分析
- 两个字母都画在 n × n n\times n n×n 的方阵上,所以每一行可以先画出字母 N 的 n 个字符,再输出一个空格,再画出字母 J 的 n 个字符。
- 使用 0 开始的下标:
- 字母 N:
- 第 0 列:
j == 0 - 最后一列:
j == n-1 - 主对角线:
i == j
满足上述任一条件就是*,否则是空格。
- 第 0 列:
- 字母 J:
- 第一行:
i == 0 - 中间列:中间列是第
n/2+1列,0-based 下标为n/2 - 最后一行从第 0 列到中间列:
i == n-1 && j <= n/2
满足任一条件就是*,否则是空格。
- 第一行:
- 字母 N:
- 每行把 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;
}
