首页 > 代码库 > 网易笔试题

网易笔试题

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

 

 1 #include<iostream> 2 #include<stdio.h> 3 #include<algorithm> 4 using namespace std; 5 const int N=100000; 6 int a[N]; 715 int maxcommon(int a,int b)//辗转法求最大公约数16 {17     18     int p=0;19     while(a%b)20    {21         p=a%b;22         a=b;23         b=p;24    }25    return b;26 }27   28 int main()29 {30     int n;31     while(cin>>n)32     {33         long long ca;34         cin>>ca;35         for(int i=0;i<n;i++)36         {37             scanf("%d",&a[i]);38         }39         for(int i=0;i<n;i++)40         {41             if(a[i]<=ca)42                 ca+=a[i];43             else44                 ca+=maxcommon(ca,a[i]);45         }46         cout<<ca<<endl;47     }48 }49 

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

 

 1 #include<iostream> 2 #include<math.h> 3 using namespace std; 4 int main() 5 { 6     int R,x1,y1,x2,y2,x3,y3,x0,y0; 7     while(cin>>R) 8     { 9         cin>>x1>>y1>>x2>>y2>>x3>>y3>>x0>>y0;10         double dist1=sqrt((x1-x0)*(x1-x0)+(y1-y0)*(y1-y0));11         double dist2=sqrt((x2-x0)*(x2-x0)+(y2-y0)*(y2-y0));12         double dist3=sqrt((x3-x0)*(x3-x0)+(y3-y0)*(y3-y0));13         int count=0;14         if(dist1<(double)R)15             count++;16         if(dist2<(double)R)17             count++;18         if(dist3<(double)R)19             count++;20         cout<<count<<"x"<<endl;21     }22 }23 添加笔记

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

 

 1 #include<iostream> 2 #include<vector> 3 using namespace std; 4 void findmax(vector<vector<int>>field,int N,int M,vector<int>&res) 5 { 6     for(int i=0;i<N-2;i++) 7         { 8         for(int j=0;j<M-2;j++) 9         {10             int tmp=0;11             for(int m=i;m<=i+2;m++)//以field[i][j]为起始点向左三个,向右三个的方块区域内最大能消灭的蘑菇数12               {13                for(int n=j;n<=j+2;n++)14                   {15                    if(field[m][n]>0)16                    {17                         tmp++;18                    }19                 }20             }21             if(res[0]<tmp)22             {23                 res[0]=tmp;24                 res[1]=i;25                 res[2]=j;26             }27               28         }29     }30       31 }32 int main()33 {34     int N,M,K;35     int x,y;36     while(cin>>N>>M>>K)37     {38         if(N<3)39             N=3;40         if(M<3)41             M=3;42         vector<vector<int>>field(N,vector<int>(M,0));43         while(K--)44         {45             cin>>x>>y;46             field[x-1][y-1]++;47         }48         vector<int>first(3,0);49         vector<int>second(3,0);50         findmax(field,N,M,first);51         for(int i=first[1];i<first[1]+3;i++)//第二次查找之前要把之前消灭的从field中去除52             {53             for(int j=first[2];j<first[2]+3;j++)54                 field[i][j]--;55         }56         findmax(field,N,M,second);57         cout<<first[0]+second[0]<<endl;58           59     }60 }

 

网易笔试题