深信服历年秋招笔试真题

如需获取完整资料,请点击下方链接领取《2024校招笔试真题秘籍》(实时更新中)

不收费,3人组团即可一块免费领取!限量免费10000个名额

手机端点击免费领取:https://www.nowcoder.com/link/campus_xzbs2

电脑端请扫码领取:

1、Cuboid

【题目描述】一个长方体,长宽高分别为x,y,z,都为自然数。

现在要把若干个相同的立方体摆成高为N的一根柱形体。

每层摆1个,如果两种摆法的高度是一样的,则认为这两种摆法等价,所以每层只有三种摆法。

求一共有多少种摆法。

输入描述:

第一行为一个数字N,N>=1且N<=100

第二行为长方体的长宽高,x、y、z都为无符号整数,按升序排列。

输出描述:

摆法总数,已知该总数会小于10000000

【解题思路】

动态规划。

dp[i] = dp[i-x] + dp[i-y] + dp[i-z]

 

【参考代码】

#include <stdio.h>
#include <string.h>
#include <stdlib.h>

typedef unsigned int U32;

unsigned long long cnt[1000];

unsigned long long calc(U32 n, U32 x, U32 y, U32 z)
{
    U32 i;
    cnt[0] = 1;
    for (i = 0; i <= n; ++i) {
        if (i >= x && cnt[i - x]) 
            cnt[i] += cnt[i - x];

        if (i >= y && cnt[i - y]) 
            cnt[i] += cnt[i - y];

        if (i >= z && cnt[i - z])
            cnt[i] += cnt[i - z]; 
    }
    return cnt[n];    
}

int main()
{
    U32 n;
    U32 x, y, z;

    scanf("%u\n", &n);
    scanf("%u %u %u", &x, &y, &z);
    
    printf("%llu\n", calc(n, x, y, z));
    return 0;
}

2、IPrange

【题目描述】一个数字段由首尾两个数字标识,表示一个自然数集合,

比如数字段[beg, end)表示从beg到end之间的所有自然数,

包含beg,但不包含end。

有若干个数字段,这些数字段之间可能有重叠,

怎么把这些数字段合并去重,用最少个数的数字段来表示。

合并前后,整个集合包含的数字不发生变化。

输入描述:

第一行为数字N,表示接下来有N个数字段(N<=100000)

第二行开始一共有N行,每行两个数字,分别表示一个数字段的beg和end

(beg和end为无符

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

2024软件笔试真题+答案合集 文章被收录于专栏

本专刊由牛客官方团队打造,主要讲解名企校招技术岗位的笔试题,内容中包含多个名企的笔试真题,附有题目思路及参考代码

全部评论

相关推荐

11-01 20:03
已编辑
门头沟学院 算法工程师
Amazarashi66:这种也是幸存者偏差了,拿不到这个价的才是大多数
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务