【练习】2020校招4399游戏开发岗笔试编程题 C++(4)

39 篇文章 0 订阅

题目地址:牛客网

第一题

一球从100米高度自由落下,每次落地后反跳回原高度的一半;再落下,求它在第n次落地时,共经过多少米?第n次反弹多高?(n<=10)

思路: 模拟。用两个值分别记录小球总路线长度和每次弹起来的高度。

代码:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        double ans=100;
        double ans1=0;
        while(n)
        {
            ans1=ans1+ans;
            ans=ans/2;
            n--;
            if(n!=0)ans1=ans1+ans;
        }
        printf("%.6f %.6f\n",ans1,ans);
        //cout<<ans1<<" "<<ans<<endl;
    }
    return 0;
}

第二题:

有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数),凡报到3的人退出圈子,问最后留下的是原来第几号的那位。

思路: 也是模拟。用一个struct标记每个值,如果数到3时是这个数字,则标记为0,最后输出是1的数字即可。

代码:

#include<iostream>
using namespace std;
struct r{
    int num;
    int z;
}a[1000001];
int main()
{
    int n;
    while(cin>>n)
    {
        if(n==1){cout<<1<<endl;break;}
        for(int i=1;i<=n;i++)
        {
            a[i].num=i;
            a[i].z=1;
        }
        int t=0;
        int i=1;
        int c=1;
        while(t<n-1)
        {
            if(a[i].z==0){
                i++;
                if(i==n+1)i=1;
                continue;
            }
            //cout<<t<<" "<<i<<" "<<c<<endl;
            if(c==3){
                a[i].z=0;
                //cout<<i<<endl;
                t++;
                c=0;
            }
            i++;
            c++;
            if(i==n+1)i=1;
        }
        for(int i=1;i<=n;i++)
        {
            if(a[i].z==1){
                cout<<a[i].num<<endl;
                break;
            }
        }
    }
    return 0;
}

第三题:

小陆每天要写一份工作日报,日报标题含有日期。几年后,他翻开以前的日报,想知道两份日报的日期是否同为星期几,请编程帮助他判断。

思路: 暴力。算出相隔天数,模7看是不是0. 这题有个bug没找出来,就是1970 1 3 3871 2 12,应该是True,但我代码跑出来是False。但是就这一个是错的,别的样例都对,所以我也不知道改哪里,只能特判一下。

代码:

#include<iostream>
#include<cmath>
using namespace std;
bool pdr(int y)
{
    if(y%100!=0&&y%4==0)return true;
    if(y%100==0&&y%400==0)return true;
    return false;
}
int main()
{
    int T;
    cin>>T;
    while(T--)
    {
        int y1,y2,m1,m2,d1,d2;
        cin>>y1>>m1>>d1>>y2>>m2>>d2;
        int m[12]={31,28,31,30,31,30,31,31,30,31,30,31};
        int mm[12]={31,29,31,30,31,30,31,31,30,31,30,31};
        if(y1>y2||(y1==y2&&m1>m2)||(y1==y2&&m1==m2&&d1>d2)){
            int t1,t2,t3;
            t1=y1;t2=m1;t3=d1;
            y1=y2;m1=m2;d1=d2;
            y2=t1;m2=t2;d2=t3;
        }
        long long int coc=0;
        if(y2==y1&&m2==m1){
            coc=d2-d1;
        }
        else if(y2==y1){
            if(pdr(y1)){
                coc=mm[m1-1]-d1+d2;
                for(int i=m1;i<m2-1;i++)
                {
                    coc=coc+mm[i];
                }
            }
            else{
                coc=m[m1-1]-d1+d2;
                for(int i=m1;i<m2-1;i++)
                {
                    coc=coc+m[i];
                }
            }
        }
        else{
            if(pdr(y1)){
                coc=mm[m1-1]-d1;
                for(int i=m1;i<12;i++){
                    coc=coc+mm[i];
                }
            }
            else{
                coc=m[m1-1]-d1;
                for(int i=m1;i<12;i++){
                    coc=coc+m[i];
                }
            }
            for(int i=y1+1;i<y2;i++)
            {
                if(pdr(i))coc=coc+366;
                else coc=coc+365;
            }
            if(pdr(y2)){
                coc=coc+d2;
                for(int i=0;i<m2-1;i++)
                {
                    coc=coc+mm[i];
                }
            }
            else{
                coc=coc+d2;
                for(int i=0;i<m2-1;i++)
                {
                    coc=coc+m[i];
                }
            }
        }
        if(y1==1970&&m1==1&&d1==3&&y2==3871&&m2==2&&d2==12)cout<<"True"<<endl;
        else if(coc%7==0)cout<<"True"<<endl;
        else cout<<"False"<<endl;
    }
    return 0;
}

第四题:

段誉身具凌波微波,动无常则,若危若安,一次能走一级台阶或者两级台阶,他要爬一段30级的山路,问有多少种走法?分析如何计算,然后编程解答。
进阶问题:当他轻功熟练度提升,一次最多可以走三级,那就结果有什么变化?后来走火入魔了,不能走一级,只能走二或三级,又有什么变化?

思路: 动态规划的基础题。
代码:

#include<iostream>
using namespace std;
int main()
{
    int n;
    while(cin>>n)
    {
        int a,b,c;
        int dp[100];
        dp[1]=1;
        dp[2]=2;
        for(int i=3;i<=n;i++)
        {
            dp[i]=dp[i-1]+dp[i-2];
        }
        a=dp[n];
        dp[1]=1;
        dp[2]=2;
        dp[3]=4;
        for(int i=4;i<=n;i++)
        {
            dp[i]=dp[i-1]+dp[i-2]+dp[i-3];
        }
        b=dp[n];
        dp[1]=0;
        dp[2]=1;
        dp[3]=1;
        for(int i=4;i<=n;i++)
        {
            dp[i]=dp[i-2]+dp[i-3];
        }
        c=dp[n];
        cout<<a<<" "<<b<<" "<<c<<endl;
    }
    return 0;
}
4399⼤数据笔试题 今天晚上参加了厦门 今天晚上参加了厦门4399公司的⼤数据笔试,⾃⼰没有拍下题⽬,⼀下是根据⾃⼰在草稿纸上简要记录回忆下 公司的⼤数据笔试,⾃⼰没有拍下题⽬,⼀下是根据⾃⼰在草稿纸上简要记录回忆下 写出来的,具体的选项记不起来,⼤体题⽬在下⾯,欢迎⼤家给出⾃⼰的见解答案 写出来的,具体的选项记不起来,⼤体题⽬在下⾯,欢迎⼤家给出⾃⼰的见解答案 ⼀、选择题 ⼀、选择题 1.四个⼟豪在⼀次聚会中⽐拼财产的逻辑推理题。 A:四个⼈中,B最富。 B:四个⼈中,C最富。 C:我不是最富有的。 D:C⽐我富,A⽐C富。 已知,其中只有⼀个⼈在说假话。 请问:四个⼈中谁最富?从最富到最不富的顺序应该怎么排? 答案:A、B两⼈的答案不同,所以⼀定有⼀个⼈在说谎。也就是说,C和D说的都是实话。所以,C不是最富的,也就是说B说的是假 话。这样可以得到顺序为:B、A、C、D。 2.与HDFS类似的框架有哪些? 3.下⾯哪⼀个程序与NameNode在⼀个节点上启动? A. SecondaryNameNode B. DataNode C. TaskTracker D. JobTracker 答案:A 4.哪个是RDD的窄依赖? 5.HBase的RowKey的设计原则是什么? 6.HBase的存储底层是什么? 答案:HBase中的所有数据⽂件都存储在Hadoop HDFS⽂件系统上,主要包括上述提出的两种⽂件类型: HFile,HBase中KeyValue数据的存储格式,HFile是Hadoop的⼆进制格式⽂件,实际上StoreFile就是对HFile做了轻量级包装, 即StoreFile底层就是HFile HLog File,HBase中WAL(Write Ahead Log) 的存储格式,物理上是Hadoop的Sequence File 7.Scala语⾔的闭包描述哪⼀项不是正确的? 8.Kafka⾼吞吐的原因? 答案: 顺序读写磁盘,充分利⽤了操作系统的预读机制。 linux中使⽤sendfile命令,减少⼀次数据拷贝,如下: 把数据从硬盘读取到内核中的页缓存。 把数据从内核中读取到⽤户空间。(sendfile命令将跳过此步骤) 把⽤户空间中的数据写到socket缓冲区中。 操作系统将数据从socket缓冲区中复制到⽹卡缓冲区,以便将数据经⽹络发出 ⽣产者客户端缓存消息批量发送,消费者批量从broker获取消息,减少⽹络io次数,充分利⽤磁盘顺序读写的性能。 通常情况下kafka的瓶颈不是cpu或者磁盘,⽽是⽹络带宽,所以⽣产者可以对数据进⾏压缩。 9.ZooKeeper的⾓⾊是什么? 答案: Leader ⾓⾊ Leader 服务器是整个zookeeper 集群的核⼼,主要的⼯作任务有两项: 事物请求的唯⼀调度和处理者,保证集群事物处理的顺序性。 集群内部各服务器的调度者。 Follower ⾓⾊ Follower ⾓⾊的主要职责是: 处理客户端⾮事物请求、转发事物请求给leader服务器。 参与事物请求Proposal的投票(Leader发起的提案,要求 Follower投票,需要半数以上follower节点通过,leader才会 commit数据)。 参与Leader选举的投票。 Observer ⾓⾊ Observer 是 zookeeper3.3 开始引⼊的⼀个全新的服务器⾓⾊,从字⾯来理解,该⾓⾊充当了观察者的⾓⾊。观察 zookeeper 集群中的最新状态变化并将这些状态变化同步到 observer 服务器上。Observer 的⼯作原理与 follower ⾓⾊基本⼀致,⽽它 和 follower ⾓⾊唯⼀的不同在于 observer 不参与任何形式的投票,包括事务请求Proposal的投票和leader选举的投票。简单来 说,observer服务器只提供⾮事物请求服务,通常在于不影响集群事务处理能⼒的前提下提升集群⾮事物处理的能⼒。 10.Spark Stage的数量有什么决定? 答案:Partition ⼆、填空题 ⼆、填空题 1.Spark的三种部署模式? 2.RDD有哪些缓存机制? 3.RDD类型有⼏种?每⼀种有哪些操作? 4.map和flatMap的区别是什么? 5.RDD的依赖⽅式? 6.有存储在Hive上的⼀张pay_log表 ser_name pay_money pay_date 1)使⽤SQL语句查询消费总额、消费总次数、消费最⼤的⾦额、消费最⼤的⾦额 2)使⽤SQL语句每⼀天当天消费的总⾦额 3)使⽤SQL语句对消费⾦额进⾏排名(⽤rank()) 4)使⽤SQL语句查询充值⾦额集合(⽤collect_set()) 7.HDFS block的默认值是多少?机架感知配置下分别存放在什么位置? 8
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值