猿辅导校招笔试真题(软开)求职宝典理工科版

1.12.1 小猿的依赖循环

【题目描述】

小猿在加载一个网页,这个网页共需要N个相关资源,这些资源之间有一些依赖关系。如果这些资源中存在循环依赖,我们认为这个网页不能加载成功,否则可以加载成功。存在循环依赖是指,这些资源中存在资源X,X依赖的资源Y直接或间接依赖于X。

你能帮助小猿判断一下这个网页能否加载成功吗?

输入描述:

第一行输入T(T ≤ 10),表示输入T组数据。

每组数据第1行,输入一个数N(1 ≤ N ≤ 500)表示该组case有编号为1~N的N项资源。

每组数据第2到 N+1 行,输入一个 N*N 的零一矩阵。矩阵第 i 行第 j 列数字为 a[i][j] 表示编号为 i 的资源是否依赖于编号为 j 的资源,1表示依赖,0表示不依赖。数据保证a[i][i] = 0。

输出描述:

输出包含T行,每行输出对应每组case中是否存在循环依赖。存在输出1,不存在输出0。

输入样例:

2

3

0 1 0

0 0 1

1 0 0

3

0 1 0

0 0 0

0 0 0

输出样例:

1

0

说明:

第一组数据:1依赖于2,2依赖于3,3依赖于1,存在循环依赖。第二组数据:只有1依赖于2,不存在循环依赖。

【解题思路】

使用dfs优先遍历搜索来查看是否产生了循环。

注意事项:不能够直接dfs(0),即所有的未走过的节点都要进行一次dfs,即图中的连通图的dfs遍历方式。即会有一种情况产生:a、b、c之间没有产生循环依赖,且a、b、c都没有依赖d和e,但是d和e却产生了依赖。但是如果只有一个dfs(0)就会产生错误,误以为这组数据没有产生循环依赖,事实却是产生了循环依赖,只是恰巧不在dfs(0)可以遍历到的范围之内罢了。

【参考代码】

#include<iostream>

using namespace std;

int n, t;

int p[505][505];

bool pd[505];

int ans = 0;

void init(int x) {

for (int i = 0; i < x; i++) {

for (int j = 0; j < x; j++) {

p[i][j] = 0;

}

pd[i] = false;

}

ans = 0;

}

void dfs(int x) {

if (pd[x] == true) {

ans = 1;

return;

}

pd[x] = true;

for (int i = 0; i < t; i++) {

if (p[x][i] == 1) {

dfs(i);

}

}

pd[x] = false;

}

int main() {

cin >> n;

while (n != 0) {

cin >> t;

init(t);

for (int i = 0; i < t; i++) {

for (int j = 0; j < t; j++) {

cin >> p[i][j];

}

}

//dfs(0);

//上面这行代码就是只从0这个点开始导致了错误。

//下面这部分for循环代码就是为了能够遍历所有的未走过的节点,由此得出的答案才是正确答案。

for (int i = 0; i < t; i++) {

if (pd[i] == false) {

dfs(i);

if (ans == 1) {

break;

}

}

}

cout << ans << endl;

n--;

}

return 0;

}

1.12.2 最小特殊的数字

【题目描述】

用全部N(N<=10)个0-9的数字组成一个“有效”整数(即没有前置0的整数),求这些组成的数中能被K(0<K<10^10)整除的最小数字。

输入描述:

输入分两行,第一行输入N, K,第二行输入N个数字。

输出描述:

输出满足条件的最小的数(不含前置0),如果没有满足条件的数输出 -1。

备注:

数字中不能使用前置0,例如四个数字0、1、2、3组成的满足条件的最小数不能是0123。

输入样例1:

4 7

4 0 1 3

输出样例1:

1043

说明:

413 % 7 = 0, 但是有前置0,所以满足条件的最小数是 1043 % 7 = 0。

输入样例2:

1 142

0

输出样例2:

0

【解题思路】

看到数据范围1~10,直接next_permutation枚举数组全排列,判断前导为0的情况,注意会爆longlong。

【参考代码】

#include<bits/stdc++.h>

using namespace std;

#define ll long long

ll n;

ll k;

int a[100];

bool ck(ll x){

int cnt=0;

if(x==0) cnt=1;

while(x){

cnt++;

x/=10;

}

return cnt==n;//如果位数不一样说明有前导0不符合要求

}

int main(){

cin>>n>>k;

for(int i=0;i<n;i++) cin>>a[i];

sort(a,a+n);

do{

ll res=0;

for(int i=0;i<n;i++) res=res*10+a[i];

if(ck(res)&&res%k==0){

cout<<res<<endl;return 0;

}

}while(next_permutation(a,a+n));

puts("-1");

return 0;

}

......

资料全部内容请看《2025届求职宝典-理工科版

不收费,2人组团即可免费领取!已经发出10000份,涵盖各大公司求职资料,助你事半功倍!

资料包含:

  • 30+大厂面试真题+解析
  • 软件方向:阿里、腾讯、百度、小米、华为、美团......
  • 硬件方向:华为、比亚迪、汇川、新华三、中兴、海康威视......
  • 机械方向:比亚迪、华为、美的、长江存储、宁德时代......
  • 30+大厂岗位薪资爆料
  • 30+大厂offer攻略

拿offer,别犹豫,点击马上领取>>https://www.nowcoder.com/link/campus_ziliao2024-tiezi19

电脑端请微信扫码>>

多说无益,直接上资料截图

每个方向专栏售价69元,但是参与2人组团就可免费领取

点击马上领取>>https://www.nowcoder.com/link/campus_ziliao2024-tiezi19

#校招笔试真题#
全部评论

相关推荐

背景&nbsp;双末9&nbsp;做的基本是FPGA相关,一个B类比赛二等奖,一段IC验证实习,简历很普通摩尔线程&nbsp;3.14投递&nbsp;1.芯片验证工程师2.芯片原型验证3.GPUIP设计全部简历挂&nbsp;4.9捞GPU架构工程师&nbsp;(应用分析方向)&nbsp;放弃地平线3.14投&nbsp;数字芯片设计(成都)&nbsp;3.25简历挂3.25投&nbsp;SoC前端验证(深圳)&nbsp;4.18一面&nbsp;当晚状态变成二面主要问项目,时不时问了一些验证八股4.22约二面&nbsp;4.26二面&nbsp;无结果,大概率挂当天北京车展发布会,主管很忙,基本闲聊,问了一点上一段实习相关更新:5.8下午电话询问,告知已有合适人选平头哥(上海)3.26投&nbsp;芯片设计/验证/DFT工程师&nbsp;4.10&nbsp;发测评4.18&nbsp;约代码测&nbsp;4.26代码测4.28&nbsp;约一面&nbsp;4.29一面一小时,没有八股,全部聊的项目和上一段实习当前状态等待面试结果更新:5.8约技术终面、5.9更新&nbsp;技术终面&nbsp;20min&nbsp;自我介绍、一些八股(比较偏)、详细的项目介绍、未来规划(设计/验证),结束后几分钟状态变成等待面试结果5.10更新&nbsp;5.11hr面5.11更新&nbsp;很常规的hr面,没有压力,结束半小时后状态变成等待面试结果5.15更新&nbsp;意向书海思(成都)5.9&nbsp;10-11点一面&nbsp;11-12点二面5.9更新&nbsp;技术面&nbsp;自我介绍(成绩、项目、实习等),机试复盘,抽了6道题+1道手撕&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;主管面&nbsp;&nbsp;聊天,说会给我过,但是也要等指标下来排序5.10更新&nbsp;池子开泡6.4更新&nbsp;oc,但人已经在平头哥了,说是秋招流程可以简化联发科(成都)5.11&nbsp;一面5.11更新&nbsp;主管面的,整体像平头哥技术终面+hr面,有问一些项目,和遇到的问题,以及解决方法,还有怎么处理矛盾这种。没有手撕,没有八股,比较泛,像你觉得uvm的优势是什么,举一个实际的例子。反问阶段直接push进度。5.19&nbsp;二面&nbsp;和一面一个主管,纯聊天,反问未来发展,主要5G的IP验证,然后有一些做wifi相关的,后面推进做6G,星闪5.21&nbsp;HR电话&nbsp;待遇10500一月,无租房补贴,有食堂、健身房等,确定要去才发offer
投递平头哥等公司7个岗位
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务