【笔试刷题】金山-2025.11.16-改编真题
✅ 秋招备战指南 ✅
💡 学习建议:
- 先尝试独立解题
- 对照解析查漏补缺
🧸 题面描述背景等均已深度改编,做法和题目本质基本保持一致。
🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力
🌸 目前本专栏已经上线180+套真题改编解析,后续会持续更新的
春秋招笔试机考招合集 -> 互联网必备刷题宝典🔗
金山-2025.11.16
题目一:魔法阵图案
1️⃣:分析魔法阵的层次结构,理解每一层的星号排列规律
2️⃣:使用循环构建每个三角形层次
3️⃣:注意空格填充和字符串拼接,确保输出格式正确
难度:简单
题目二:课堂学习打印表
1️⃣:使用双重循环遍历每一行和每一列
2️⃣:按照格式拼接算式字符串
3️⃣:注意同一行的算式之间用4个空格分隔
难度:简单
题目三:阶梯计数问题
1️⃣:识别问题本质是等差数列求和
2️⃣:使用数学公式
直接计算
3️⃣:注意处理大数溢出问题
难度:简单
1. 魔法阵图案
问题描述
小兰是一位热衷于研究古代魔法的学者,最近她在古籍中发现了一种特殊的魔法阵绘制方法。这种魔法阵由星形符号 * 组成,其结构随着魔法等级 的变化而变化。
魔法阵的绘制规则如下:
魔法阵由上至下分为多个层次,每一层的星形符号数量和位置都有特定的排列规则。最上方是一个单独的星形符号,然后逐层展开,每层的星形符号之间用空格分隔。最底部有一个或多个星形符号作为魔法阵的基座。
请你帮助小兰编写程序,根据输入的魔法等级 ,输出对应的魔法阵图案。
输入格式
输入一个正整数 ,表示魔法阵的等级。
输出格式
输出对应等级的魔法阵图案,每行末尾不包含多余的空格。
样例输入
1
2
样例输出
*
* *
* * *
*
*
* *
* *
* * * *
* * * * * *
*
*
| 样例 | 解释说明 |
|---|---|
| 样例1 | 等级为1的魔法阵,包含4层,从上到下分别是1个、2个、3个星形符号和1个基座 |
| 样例2 | 等级为2的魔法阵,结构更复杂,最宽处有6个星形符号,底部基座有2个星形符号 |
数据范围
题解
这道题要求根据等级 输出特定格式的魔法阵图案。通过观察样例可以发现:
分析规律
魔法阵分为上半部分和基座两部分:
-
上半部分由
个三角形组成,每个三角形有
行
-
第
个三角形(从
开始计数):
- 第一行:距离左边界
个空格,输出
个星号
- 第二行:输出之前所有三角形的第二行内容,再输出当前三角形的
个星号
- 第三行:合并所有三角形的第三行,每个三角形贡献
个星号
- 第一行:距离左边界
-
基座部分:
行,每行在中间位置输出
个星号
具体实现
对于等级 的魔法阵:
- 总宽度为
- 依次构建每个三角形的各行
- 使用字符串拼接和空格填充来实现对齐
时间复杂度
每个等级需要输出 行,每行处理时间为
,总时间复杂度为
。由于
,这个复杂度完全可以接受。
参考代码
- Python
import sys
input = lambda: sys.stdin.readline().strip()
def solve():
# 读入魔法阵等级
n = int(input())
# 总宽度为3*n
w = 3 * n
# 构建上半部分的三角形
for i in range(n):
# 第一行:单个星号
sp = 3 * (n - i - 1) # 左侧空格数
print(' ' * sp + '*')
# 第二行:每个已有三角形贡献2个星号
line = []
for j in range(i + 1):
pos = 3 * (n - j - 1) # 每个三角形的起始位置
line.append((pos, '*'))
line.append((pos + 2, '*'))
# 构造该行字符串
row = [' '] * w
for p, c in line:
if p < w:
row[p] = c
print(''.join(row).rstrip())
# 第三行:所有三角形的底部合并
if i == n - 1:
line = []
for j in range(n):
for k in range(3):
pos = 3 * (n - j - 1) + k
line.append(pos)
row = [' '] * w
for p in line:
if p < w:
row[p] = '*'
print(''.join(row).rstrip())
# 输出基座部分
base_pos = 3 * (n - 1) + 1 # 基座中心位置
for _ in range(n):
print(' ' * base_pos + '*')
if __name__ == "__main__":
solve()
- Cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
int w = 3 * n; // 总宽度
// 构建上半部分
for (int i = 0; i < n; i++) {
// 第一行:单个星号
int sp = 3 * (n - i - 1);
cout << string(sp, ' ') << "*\n";
// 第二行:多个三角形的星号
string row(w, ' ');
for (int j = 0; j <= i; j++) {
int pos = 3 * (n - j - 1);
if (pos < w) row[pos] = '*';
if (pos + 2 < w) row[pos + 2] = '*';
}
// 去除末尾空格
while (!row.empty() && row.back() == ' ') row.pop_back();
cout << row << "\n";
// 第三行:最后一轮才输出
if (i == n - 1) {
string last(w, ' ');
for (int j = 0; j < n; j++) {
for (int k = 0; k < 3; k++) {
int pos = 3 * (n - j - 1) + k;
if (pos < w) last[pos] = '*';
}
}
while (!last.empty() && last.back() == ' ') last.pop_back();
cout << last << "\n";
}
}
// 输出基座
int base = 3 * (n - 1) + 1;
for (int i = 0; i < n; i++) {
cout << string(base, ' ') << "*\n";
}
return 0;
}
- Java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int w = 3 * n; // 魔法阵总宽度
// 构建上半部分的三角形
for (int i = 0; i < n; i++) {
// 第一行:单个星号
int s
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力
查看6道真题和解析
腾讯云智研发成长空间 294人发布