网易2016研发工程师编程题①

来源:互联网 发布:网络教育资源 编辑:程序博客网 时间:2024/06/10 17:12

第一题

  • 小易经常沉迷于网络游戏.有一次,他在玩一个打怪升级的游戏,他的角色的初始能力值为 a.在接下来的一段时间内,他将会依次遇见n个怪物,每个怪物的防御力为b1,b2,b3…bn. 如果遇到的怪物防御力bi小于等于小易的当前能力值c,那么他就能轻松打败怪物,并 且使得自己的能力值增加bi;如果bi大于c,那他也能打败怪物,但他的能力值只能增加bi 与c的最大公约数.那么问题来了,在一系列的锻炼后,小易的最终能力值为多少?
    -

#include<stdio.h>#include<stdlib.h>#include<math.h>int Q(int a,int b){int A;int B;int i=1,j;for(j=2;j<=a;j++){A=a%j;B=b%j;if((A==0)&&(B==0)){    i=j*Q(A,B);}    }   return i;}void game(int n,int a,int b[]){int i;int j;int A;int B;int m;for (i = 0; i < n; i++){if(a>=b[i])a=a+b[i];else{if((b[i]%a)==0)a=a+a;else{    m=Q(a,b[i]);  a=a+m;   }}}printf("%d\n",a);}int main(){int i;int n,a;int * b;while(scanf("%d%d",&n,&a) != EOF){    b=(int*)malloc(sizeof(int)*n);    for(i=0;i<n;i++){    scanf("%d",&b[i]);    }    if(n>100000)    return 0;    if(n<=0)    return 0;    else{    game(n,a,b);}}return 0;}

第二题

  • 兰博教训提莫之后,然后和提莫讨论起约德尔人,谈起约德尔人,自然少不了一个人,那 就是黑默丁格——约德尔人历史上最伟大的科学家. 提莫说,黑默丁格最近在思考一个问题:黑默丁格有三个炮台,炮台能攻击到距离它R的敌人 (两点之间的距离为两点连续的距离,例如(3,0),(0,4)之间的距离是5),如果一个炮台能攻击 到敌人,那么就会对敌人造成1×的伤害.黑默丁格将三个炮台放在N*M方格中的点上,并且给出敌人 的坐标. 问:那么敌人受到伤害会是多大?
    -

#include<iostream>#include<math.h>using namespace std;int P(int x1,int y1,int x0,int y0,int R){     int x=(x1-x0)*(x1-x0);     x=fabs(x);     int y=(y1-y0)*(y1-y0);     y=fabs(y);     int ins=x+y;     int r=R*R;     if(r>=ins)     return 1;elsereturn 0;}int main(){int R,x1,y1,x2,y2,x3,y3,x0,y0;while(~scanf("%d%d%d%d%d%d%d%d%d",&R,&x1,&y1,&x2,&y2,&x3,&y3,&x0,&y0)){int c1=P(x1,y1,x0,y0,R);int c2= P(x2,y2,x0,y0,R);int c3= P(x3,y3,x0,y0,R);int count=c1+c2+c3;cout<<count<<"x"<<"\n";}return 0;}

第三题

  • 在N*M的草地上,提莫种了K个蘑菇,蘑菇爆炸的威力极大,兰博不想贸然去闯,而且蘑菇是隐形的.只 有一种叫做扫描透镜的物品可以扫描出隐形的蘑菇,于是他回了一趟战争学院,买了2个扫描透镜,一个 扫描透镜可以扫描出(3*3)方格中所有的蘑菇,然后兰博就可以清理掉一些隐形的蘑菇. 问:兰博最多可以清理多少个蘑菇?
    -

#include<iostream>using namespace std;int clear(int **P,int N,int M){   int Maxm=0;int Mg=0;     for(int i = 0;i < N; i++)     for (int j = 0; j < M; j++)     {         Mg=0;         if(P[i][j]>0)         Mg++;         if(j-1<0);         else         {            if (i+1>N-1);           else       {            if(P[i+1][j-1]>0)             Mg++;       }           if (i-1<0);           else           {          if(P[i-1][j-1]>0)              Mg++;           }            if(P[i][j-1]>0)              Mg++;         }         if(j+1>M-1);         else         {           if (i+1>N-1);           else           {        if(P[i+1][j+1]>0)              Mg++;           }           if (i-1<0);           else           {        if(P[i-1][j+1]>0)              Mg++;           }           if(P[i][j+1]>0)              Mg++;         }         if(i-1<0);         else          {           if(P[i-1][j]>0)         Mg++;         }         if(i+1>N-1);         else          {        if(P[i+1][j]>0)        Mg++;         }         if(Mg>Maxm)         {            Maxm=Mg;         }     }     return Maxm;}int main(){  int **P;  int count=0;  int N,M,K;  int x,y;  while(scanf("%d %d %d",&N,&M,&K)!= EOF){count=0;   P=new int*[N];   for(int j=0;j<N;j++)   {   P[j]=new int[M];   }   for(int a=0;a<N;a++)       for(int b=0;b<M;b++)  {            P[a][b]=0;          }     for(int i=0;i<K;i++)     {          cin>>x>>y;          P[x-1][y-1]++;     }    count=clear(P,M,N);    for(int a=0;a<N;a++)       for(int b=0;b<M;b++)  {  if(P[a][b]>0)             P[a][b]--;          }    count+=clear(P,M,N);    cout<<count;}    return 0;}

这道题没有AC,还有问题小伙伴可以一起来讨论

0 0
原创粉丝点击