【笔试刷题】宇信科技-2026.03.02-改编真题

✅ 春招备战指南 ✅

💡 学习建议:

  • 先尝试独立解题
  • 对照解析查漏补缺

🧸 题面描述背景等均已深度改编,做法和题目本质基本保持一致。

🍹 感谢各位朋友们的订阅,你们的支持是我们创作的最大动力

🌸 目前本专栏已经上线200+套真题改编解析,后续会持续更新的

春秋招笔试机考招合集 -> 互联网必备刷题宝典🔗

宇信科技-2026.03.02

这套题的节奏比较清楚:第一题是判断题热身,第二题是经典构造,第三题才是真正拉开差距的证明题。前两题更像在考基本功和构造直觉,第三题则要求把“子序列不连续”这个条件吃透,才能把问题化成只看每组极值。

题目一:裁布三角样片校验

这题表面是几何题,真正要做的其实只有两步:先判三角形是否合法,再判排好序后的三条边是否同比分。输出分支虽然有三种,但逻辑很干净,主要别在“退化三角形也算三角形吗”这里踩坑。

难度:Low

题目二:演出顺序编排

这是很标准的下降对构造题。只要想到“前面递增、后面递减”这件事,下降次数就能被稳定锁成 ,而且连接处不会额外制造答案。

难度:Mid

题目三:社团分组波动值

这题最关键的不是写代码,而是先想明白哪些元素真的会影响答案。因为子序列可以不连续,中间元素往哪组塞通常都无所谓,核心只剩每组最小值和最大值;把这个抽象出来后,答案就变成“最大的 个数之和减去最小的 个数之和”。

难度:High

01. 三角形相似判断

问题描述

给定一个基准三角形的三条边长 a, b, c,以及 q 组询问。

每组询问给出三个正整数 x, y, z,你需要先判断这三条边能否构成一个非退化三角形;如果能,再判断它是否与基准三角形相似。

本题中,非退化三角形满足任意两边之和大于第三边。

输入格式

第一行输入三个正整数 a, b, c1 ≤ a, b, c ≤ 100),表示基准三角形的三条边。数据保证 a, b, c 一定能构成三角形。

第二行输入一个正整数 q1 ≤ q ≤ 100),表示询问次数。

接下来 q 行,每行输入三个正整数 x, y, z1 ≤ x, y, z ≤ 100),表示一次询问中的三条边长。

输出格式

对于每组询问,输出一行结果:

  • 如果不能构成三角形,输出 Cannot form a triangle
  • 如果能构成三角形但不与基准三角形相似,输出 Can form a triangle but not similar
  • 如果与基准三角形相似,输出 similar

样例输入

3 4 5
3
10 6 8
3 6 9
9 9 9

样例输出

similar
Cannot form a triangle
Can form a triangle but not similar
样例 解释说明
第 1 组询问 10, 6, 8 排序后是 6, 8, 10,与 3, 4, 5 的对应边成相同比例,因此相似
第 2 组询问 3 + 6 = 9,只能构成退化三角形,因此不能构成三角形
第 3 组询问 9, 9, 9 可以构成三角形,但与 3, 4, 5 的三边比例不同,因此不相似

数据范围

  • 1 ≤ a, b, c ≤ 100
  • a, b, c 保证能构成三角形
  • 1 ≤ q ≤ 100
  • 1 ≤ x, y, z ≤ 100

题解

先将基准三角形的三条边排序,记为 base[0] ≤ base[1] ≤ base[2]

对于每次询问,也把三条边排序,记为 cur[0] ≤ cur[1] ≤ cur[2]

第一步先判断能否构成三角形。排序后只需要检查:

cur[0] + cur[1] > cur[2]

如果不成立,就输出 Cannot form a triangle

第二步判断是否与基准三角形相似。排序后,对应边需要成相同比例。为了避免浮点误差,可以直接交叉相乘判断:

  • base[0] * cur[1] == base[1] * cur[0]
  • base[1] * cur[2] == base[2] * cur[1]

两个条件同时成立时,说明三组对应边成相同比例,此时输出 similar;否则输出 Can form a triangle but not similar

复杂度分析

每次询问只处理 3 条边,排序和判断都是常数时间,因此单次询问时间复杂度为 O(1),总时间复杂度为 O(q)

额外空间复杂度为 O(1)

参考代码

Python

import sys


def solve() -> None:
    # 基准三角形先排序,后面所有询问都按对应边比较比例。
    base = sorted(map(int, sys.stdin.readline().split()))
    q = int(sys.stdin.readline())
    ans = []
    for _ in range(q):
        # 当前询问也排序后处理,避免讨论边的对应关系。
        cur = sorted(map(int, sys.stdin.readline().split()))
        if cur[0] + cur[1] <= cur[2]:
            ans.append("Cannot form a triangle")
        elif base[0] * cur[1] == base[1] * cur[0] and base[1] * cur[2] == base[2] * cur[1]:
            ans.append("similar")
        else:
            ans.append("Can form a triangle but not similar")
    sys.stdout.write("\n".join(ans))


if __name__ == "__main__":
    solve()

Cpp

#include <algorithm>
#include <array>
#include <iostream>
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);

    // 先把基准三角形排序,后面统一按升序边长比较。
    array<int, 3> base;
    cin >> base[0] >> base[1] >> base[2];
    sort(base.begin(), base.end());

    int q;
    cin >> q;
    while (q--) {
        // 当前询问排序后,只要检查三角形合法性和比例关系即可。
        array<int, 3> cur;
        cin >> cur[0] >> cur[1] >> cur[2];
        sort(cur.begin(), cur.end());

        if (cur[0] + cur[1] <= cur[2]) {
            cout << "Cannot form a triangle\n";
        } else if (1LL * base[0] * cur[1] == 1LL * base[1] * cur[0] &&
                   1LL * base[1] * cur[2] == 1LL * base[2] * cur[1]) {
            cout << "similar\n";
        } else {
            cout << "Can form a triangle but not similar\n";
        }
    }

    return 0;
}

Java

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.StringTokenizer;

public class Main {
    static class FastScanner {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st;

        String next() throws Exception {
            while (st == null || !st.hasMoreTokens()) {
                st = new StringTokenizer(br.readLine());
            }
            return st.nextToken();
        }

        int nextInt() throws Exception {
            return Integer.parseInt(next());
        }
    }

    public static void main(String[] args) throws Exception {
        FastScanner fs = new FastScanner();
        // 基准三角形先排序,方便后面按对应边判断相似。
        int[] base = {fs.nextInt(), fs.nextInt(), fs.nextInt()};
        Arrays.sort(base);

        int q = fs.nextInt();
        StringBuilder out = new StringBuilder();
        while (q-- > 0) {
            // 当前询问排序后,先判三角形,再判比例。
            int[] cur = {fs.nextInt(), fs.nextInt(), fs.nextInt()};
            Arrays.sort(cur);

            if (cur[0] + cur[1] <= cur[2]) {
                out.append("Cannot form a triangle\n");
            } else if (1L * base[0] * cur[1] == 1L * base[1] * cur[0]
                    && 1L * base[1] * cur[2] == 1L * base[2] * cur[1]) {
                out.append("similar\n");
            } else {
                out.append("Can form a triangle but not similar\n");
            }
        }
        System.out.print(out);
    }
}

02. 奖章陈列的转折点

问题描述

K 小姐正在布置一面奖章展示墙。

现在有 1n 号这 n 枚奖章,每枚奖章都要恰好使用一次,并且要从左到右排成一列。

如果某一对相邻位置满足“左边奖章的编号大于右边奖章的编号”,就把这处位置记作一个“回落点”。

K 小姐希望整面展示墙里,回落点的数量恰好等于 k。请你构造一个满足要求的排列。

可以证明,在 k < n 时一定存在合法方案。

本题为构造题,使用 Special Judge。如果存在多种合法方案,输出任意一种即可。

输入格式

一行两个整数 和 ,表

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

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

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

全部评论

相关推荐

有一点标题党&nbsp;不过心仪的岗位应该是可以找到的!主包是非典型强技术人,没啥经验,没实习,没啥比赛,不过面试的时候几乎也不问校园经历,代码比较多的时候都是在刷算法,最近在复盘整个找工作的过程和注意点,感觉和找到实习前的想法不太一样,或许没有想象的那么难,也有一定的邪修成分在,希望能给到大家一些启示(注:全为个人想法和感受,完全没有权威性&nbsp;可参考或不参考首先是写简历,我认为这是相当重要的一环,一开始找实习的时候确实没啥好写的,啥乱七八糟的大创都往里写,口语化句子也上来了,冗余的个人信息到处都是,不管对不对口各种项目都往里写&nbsp;实则课设玩具。。然后投,然后进行八股随机复习。但是面试几次之后感觉简历是很重要的,我认为这是一个自己出的考点题单,专业的面试官都会在简历中找问题问,还有一个是如果项目经历和岗位高度匹配确实会吸引相当一部分火力,不会漫无目的的都是八股!那没有啥项目经历咋整呢?编!(bushi)既然项目经历是你的经历,那你完全可以先写结果再经历这里有一点是可以先挑选心仪的岗位,然后把岗位要求给ai,让ai给你写最适配这个岗位的项目和技术栈,然后可以让它推荐点开源代码,这就是你项目的来源了(怎么学习?:开源代码!&nbsp;其实个人来看的话,基本简历主要两个部分就是技术栈和项目经历,其他的怀疑面试官都没看过如果时间紧的话不看开源代码也行,但是一定项目要有代码可看,这里可以让ai给你整一个几千上万行的代码项目,然后开始一个文件一个文件开始读,最好是能把项目都通读一遍或者理解整个框架(完全手搓项目的大神可忽略。)甚至完全有可能根据这个项目开始学习、入门这个领域当经历极其匹配的时候,面试官就会深层次挖你的经历了,但是这样答上来也有很大的通过率。甚至面试可能不会考正常的算法,可能会考项目介绍中可能有的数据结构/项目简单函数实现,不过也不用太担心,就把你两个项目学透即可,也不会有太复杂的实现,我认为字节的算法有可能不按常理出牌,极其看重数据结构的抽象逻辑,所以可能有的时候算法该刷还是要刷&nbsp;要有一些归纳总结能力,感觉tx基本是hot100除了琢磨不透的算法&nbsp;八股应该都会取自于项目里了可以边学边约面,这样有ddl威胁自己效率特高(嗯),最重要的是敢于尝试!上面这种出来的极其匹配的简历一投应该就能约面,要勇敢面试!我一般有面试焦虑,三天内只能有一个面试,所以每个面试基本都针对性预想过好几遍了&nbsp;(这可能是焦虑人的唯一优点在面试前可以让ai给你出一下关于简历和岗位的题单,命中率蛮高的面试挂了千万不要害怕停止,可能会有更好的机会,并且成为宝贵的经验!暂时就想到这么多,之后可能随机更点landing过程其实也需要准备挺长时间的,也是有要脚踏实地学的,不过可能有针对性的学习会轻松一些,在学习的路上多亏了牛客上兄弟姐妹们的经验分享,希望个人的经验也能给大家带来点启示祝大家早日拿到心仪的offer!
27届求职交流
点赞 评论 收藏
分享
昨天 18:11
门头沟学院 Java
想要实习的牛:这么牛逼的简历都吃瘪吗🌚那我不寄了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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