字节 前端游戏 秋招 两次面筋 附编程题代码

这个是字节最近招人贼多的部门,牛客里大大小小的字节帖子里将近1/3都和这个部门相关。据说是做小游戏的,unity放app里的小的引流游戏(广告)。

一面:

女面试官
介绍自己
编程:写一个检测5*5矩阵是否有连续的3个1,矩阵随机出0或1。
#include<bits/stdc++.h>
using namespace std;
bool check(int a[5][5]){
    int tmp[5][5];
    int fx[]={-1,-1,-1,0};
    int fy[]={1,0,-1,-1};
    for(int fang=0;fang<4;fang++){
        memset(tmp,0,sizeof(tmp));
        for(int i=0;i<5;i++){
            for(int j=0;j<5;j++){
                tmp[i][j]=a[i][j];
                int prei=i+fx[fang];
                int prej=j+fy[fang];
                if(prei>=0&&prei<5&&prej>=0&&prej<5&&a[i][j]==1){
                    tmp[i][j]+=tmp[prei][prej];
                }
                if(tmp[i][j]==3){
                    return true;
                }
            }
        }
    }
    return false;
}
int main (){
    time_t t;
    srand((unsigned) time(&t));
    int tmp[5][5];
    for(int i=0;i<5;i++)
        for(int j=0;j<5;j++)
            tmp[i][j]=rand()<10000;
    cout<<check(tmp)<<endl;
    for(int i=0;i<5;i++){
        for(int j=0;j<5;j++){
            printf("%d\t",tmp[i][j]);
        }
        printf("\n");
    }
}


代码思路
平时做过的游戏
技术栈
用过的引擎
最熟悉的语言
说一说渲染管线
欧拉角、欧拉角的缺点
怎么判断一条射线是否穿过一个三角形
怎么学习的图形学
英语论文阅读
想做的事情

反问:部门信息

二面:

自我介绍
熟悉的语言
unity用过么
图形学在哪学的
引用和指针的区别
tcp协议的握手是干嘛的
为什么是三次握手
有没有想做的方向&未来的打算
编程:
1. 输出旋转数组,4*4的旋转数组类似于:
1   2    3  4
12 13 14 5
11 16 15 6
10 9   8   7
#include<bits/stdc++.h>
using namespace std;
int fx[]={0,1,0,-1};
int fy[]={1,0,-1,0};

int a[500][500];
void dfs (int n,int m,int i,int j,int fang,int th){
    a[i][j]=th++;
    for(int k=0;k<4;k++){
        int nxtfang = (fang+k)%4;
        int nxti=i+fx[nxtfang];
        int nxtj=j+fy[nxtfang];
        if(nxti>=0&&nxtj>=0&&nxti<n&&nxtj<m&&a[nxti][nxtj]==0){
            dfs(n,m,nxti,nxtj,nxtfang,th);
            break;
        }
    }
}
int main (){
    memset(a,0,sizeof(a));
    int n=5,m=5;
    dfs(n,m,0,0,0,1);
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            printf("%d\t",a[i][j]);
        }
        printf("\n");
    }
}
2. 输出一个数的数字的下一个排列,按递增序
1234 -> 1243
1432 -> 2134
#include<bits/stdc++.h>
using namespace std;
int trans(int n){
    int a[11],th=0;
    while(n){
        a[th++]=n%10;n/=10;
    }
    for(int i=0;i<th/2;i++) swap(a[i],a[th-i-1]);
    next_permutation(a,a+th);
    int ans=0;
    for(int i=0;i<th;i++){
        ans*=10;ans+=a[i];
    }
    return ans;
}
int main (){
    printf("%d %d",trans(1234),trans(1432));
}

三面:

渲染管线
图像算法 gaussionblur
消除锯齿 resize area算法
用过的引擎
rust的游戏引擎
rust用过
wasm的前景
考研&工作的想法
方向:引擎|逻辑
未来打算
给一个含墙的迷宫、判断哪个格子可以放炸弹可以炸最多的怪物
测试的迷宫如下:






E





W



W







E
E是怪物、W是墙,炸弹可以炸同一行、同一列,炸弹遇到墙就停止(炸弹人)
思路是枚举每个怪物位置ij,然后看看该怪物被炸的格子有哪些,把格子的cnt++。最后最大的cnt就是答案。复杂度 怪物数*(长+宽)
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
char a[50][50];
int n=5,m=5,ans=0;
int cnt[50][50] ;
int fx[4]={0,1,0,-1};
int fy[4]={1,0,-1,0};
void dfs ( char a[50][50],int cnt[50][50],int ii,int jj){
    for(int fa = 0;fa<4;fa++){
        for(int i=1;i<50;i++){
            int ni = ii+fx[fa]*i;
            int nj = jj+fy[fa]*i;
            //cout<<ni<<" "<<nj<<endl;
            if(ni>=0 && ni<n && nj>=0 && nj<m && a[ni][nj] != 'W' ){
                cnt[ni][nj]++;
                ans=max(ans,cnt[ni][nj]);
                continue;
            }
            else break;
        }
    }
}
int main() {
    memset(cnt,0,sizeof(cnt));
    memset(a,0,sizeof(a));
    ans=0;
    a[1][1]='E';
    a[2][2]='W';
    a[3][1]='W';
    a[4][4]='E';
    dfs(a,cnt,1,1);
    dfs(a,cnt,4,4);
    for(int i=0;i<n;i++){
        for(int j=0;j<m;j++){
            printf("%d\t",cnt[i][j]);
        }
        printf("\n");
    }
    printf("%d\n",ans);
}
只考虑n、m很小的情况。不考虑稀疏的大n、大m


#字节跳动##面经##校招##前端工程师#
全部评论
看到这些题目都很熟悉🤣同游戏部门
点赞 回复 分享
发布于 2020-09-22 12:15

相关推荐

评论
2
2
分享

创作者周榜

更多
牛客网
牛客企业服务