首页 > 代码库 > 网易笔试题
网易笔试题
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 }
网易笔试题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。