【笔试刷题】金山-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个星形符号

数据范围

题解

这道题要求根据等级 输出特定格式的魔法阵图案。通过观察样例可以发现:

分析规律

魔法阵分为上半部分和基座两部分:

  1. 上半部分由 个三角形组成,每个三角形有

  2. 个三角形(从 开始计数):

    • 第一行:距离左边界 个空格,输出 个星号
    • 第二行:输出之前所有三角形的第二行内容,再输出当前三角形的 个星号
    • 第三行:合并所有三角形的第三行,每个三角形贡献 个星号
  3. 基座部分: 行,每行在中间位置输出 个星号

具体实现

对于等级 的魔法阵:

  • 总宽度为
  • 依次构建每个三角形的各行
  • 使用字符串拼接和空格填充来实现对齐

时间复杂度

每个等级需要输出 行,每行处理时间为 ,总时间复杂度为 。由于 ,这个复杂度完全可以接受。

参考代码

  • 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%内容,订阅专栏后可继续查看/也可单篇购买

互联网刷题笔试宝典 文章被收录于专栏

互联网刷题笔试宝典,这里涵盖了市面上大部分的笔试题合集,希望助大家春秋招一臂之力

全部评论

相关推荐

11-18 15:12
门头沟学院
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务