网易笔试编程题讲解Word文件下载.docx
- 文档编号:16642013
- 上传时间:2022-11-25
- 格式:DOCX
- 页数:11
- 大小:19.20KB
网易笔试编程题讲解Word文件下载.docx
《网易笔试编程题讲解Word文件下载.docx》由会员分享,可在线阅读,更多相关《网易笔试编程题讲解Word文件下载.docx(11页珍藏版)》请在冰豆网上搜索。
{
returnn==0?
m:
gcd(n,m%n);
}*/
intgcd(inta,intb)
if(!
b)returna;
returngcd(b,a%b);
}
intmain()
intn,ack,ans;
while(scanf("
%d%d"
&
n,&
ack)!
=EOF)
{
while(n--)
scanf("
%d"
ans);
if(ans>
ack)
ack+=gcd(ack,ans);
elseack+=ans;
}
printf("
%d\n"
ack);
return0;
[编程题]炮台攻击
兰博教训提莫之后,然后和提莫讨论起约德尔人,谈起约德尔人,自然少不了一个人,那就是黑默丁格------约德尔人历史上最伟大的科学家.提莫说,黑默丁格最近在思考一个问题:
黑默丁格有三个炮台,炮台能攻击到距离它R的敌人(两点之间的距离为两点连续的距离,例如(3,0),(0,4)之间的距离是5),如果一个炮台能攻击到敌人,那么就会对敌人造成1×
的伤害.黑默丁格将三个炮台放在N*M方格中的点上,并且给出敌人的坐标.问:
那么敌人受到伤害会是多大?
第一行9个整数,R,x1,y1,x2,y2,x3,y3,x0,y0.R代表炮台攻击的最大距离,(x1,y1),(x2,y2),
(x3,y3)代表三个炮台的坐标.(x0,y0)代表敌人的坐标.
输出一行,这一行代表敌人承受的最大伤害,(如果每个炮台都不能攻击到敌人,输出0×
)
111223312
2x
math.h>
structPoint
intx,y;
Point(intx=0,inty=0):
x(x),y(y){}//构造函数,方便代码编写
Point(Point&
a):
x(a.x),y(a.y){}
};
inlineintDistance(PointA,PointB)
return(A.x-B.x)*(A.x-B.x)+(A.y-B.y)*(A.y-B.y);
intR;
PointA,B,C,P;
%d%d%d%d%d%d%d%d%d"
R,&
A.x,&
A.y,&
B.x,&
B.y,&
C.x,&
C.y,&
P.x,&
P.y)!
intsum=0;
R*=R;
if(Distance(A,P)<
=R)sum++;
if(Distance(B,P)<
if(Distance(C,P)<
%dx\n"
sum);
//111223312
[编程题]扫描透镜
在N*M的草地上,提莫种了K个蘑菇,蘑菇爆炸的威力极大,兰博不想贸然去闯,而且蘑菇是隐形的.只有一种叫做扫描透镜的物品可以扫描出隐形的蘑菇,于是他回了一趟战争学院,买了2个扫描透镜,一个扫描透镜可以扫描出(3*3)方格中所有的蘑菇,然后兰博就可以清理掉一些隐形的蘑菇.问:
兰博最多可以清理多少个蘑菇?
第一行三个整数:
N,M,K,(1≤N,M≤20,K≤100),N,M代表了草地的大小;
接下来K行,每行两个整数x,y(1≤x≤N,1≤y≤M).代表(x,y)处提莫种了一个蘑菇.
一个方格可以种无穷个蘑菇.
输出一行,在这一行输出一个整数,代表兰博最多可以清理多少个蘑菇.
string.h>
intm[25][25];
intvis1[25][25];
intvis2[25][25];
intd[9][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,0},{0,1},{1,-1},{1,0},{1,1}};
inlinevoidsum_map(intx,inty)
for(inti=0;
i<
9;
i++)
if(m[x+d[i][0]][y+d[i][1]]>
0)vis1[x][y]++;
1)vis2[x][y]++;
inlineintsd_sum(intx,inty,inti,intj)
if(x==i&
&
y==j)returnvis2[i][j];
elseif(i>
=x-2&
=x+2&
j>
=y-2&
j<
=y+2)
inttmp=0;
for(intk=0;
k<
k++)
intxi=i+d[k][0];
intyi=j+d[k][1];
if(xi>
=x-1&
xi<
=x+1&
yi>
=y-1&
yi<
=y+1)
if(m[xi][yi]>
1)tmp++;
else
0)tmp++;
}//controlmayreachendofnon-voidfunction[-Werror,-Wreturn-type]
returntmp;
//得知原因是自己定义了一个有返回值的函数,而函数结尾却没有返回值;
elsereturnvis1[i][j];
intN,M,K;
%d%d%d"
N,&
M,&
K)!
memset(m,0,sizeof(m));
memset(vis1,0,sizeof(vis1));
memset(vis2,0,sizeof(vis2));
K;
x,&
y);
m[x][y]++;
for(inti=1;
=N;
i++)//打表
for(intj=1;
=M;
j++)
sum_map(i,j);
intmmax=0;
for(intj=0;
for(intii=0;
ii<
ii++)
for(intjj=0;
jj<
jj++)
mmax=max(vis1[i][j]+sd_sum(i,j,ii,jj),mmax);
mmax);
题目来源:
牛客网-网易2016年研发工程师编程题二。
1.奖学金
小v今年有n门课,每门都有考试,为了拿到奖学金,小v必须让自己的平均成绩至少为avg。
每门课由平时成绩和考试成绩组成,满分为r。
现在他知道每门课的平时成绩为ai,若想让这门课的考试成绩多拿一分的话,小v要花bi的时间复习,不复习的话当然就是0分。
同时我们显然可以发现复习得再多也不会拿到超过满分的分数。
为了拿到奖学金,小v至少要花多少时间复习。
第一行三个整数n,r,avg(n大于等于1小于等于1e5,r大于等于1小于等于1e9,avg大于等于1小于等于1e6),接下来n行,每行两个整数ai和bi,均小于等于1e6大于等于1
一行输出答案。
5109
05
91
81
01
9100
43
分析:
完成这个题目需要注意两个问题:
(1)求出最少复习时间,需要优先选择每分的复习时间最小的课程,那么需要对<
平时成绩,复习时间>
元素对按复习时间递增进行排序;
(2)因为课程数很多,每分复习时间很大,所需最小复习时间需要长整型来存储,以防溢出;
(3)如果所需复习时间小于等于0,需要特殊处理。
测试通过源码:
#include<
boolcompare(constvector<
int>
vec0,constvector<
vec1)
returnvec0[1]<
vec1[1];
//升序排列
intmain(intargc,char*argv[]){
intcourseNum=0,maxScore=0,average=0;
while(cin>
>
courseNum>
maxScore>
average){
vector<
vector<
>
regularGrade_effort(courseNum,vector<
(2,0));
intregularGradeSum=0;
//平时总分
courseNum;
++i){
cin>
regularGrade_effort[i][0]>
regularGrade_effort[i][1];
regularGradeSum+=regularGrade_effort[i][0];
sort(regularGrade_effort.begin(),regularGrade_effort.end(),compare);
//按每分的复习时间升序排列
longlongintminimumTime=0;
//因为每分的复习时间很大,需要长整型,否则溢出,不能通过测试
intneedScore=courseNum*average-regularGradeSum;
if(needScore<
=0)
gotoend;
maxScore-regularGrade_effort[i][0];
++j){
--needScore;
minimumTime+=regularGrade_effort[i][1];
if(needScore==0)
end:
cout<
<
minimumTime<
endl;
2.路灯
一条长l的笔直的街道上有n个路灯,若这条街的起点为0,终点为l,第i个路灯坐标为ai,每盏灯可以覆盖到的最远距离为d,为了照明需求,所有灯的灯光必须覆盖整条街,但是为了省电,要求这个d最小,请找到这个最小的d。
每组数据第一行两个整数n和l(n大于0小于等于1000,l小于等于1000000000大于0)。
第二行有n个整数(均大于等于0小于等于l),为每盏灯的坐标,多个路灯可以在同一点。
输出答案,保留两位小数。
715
155379140
2.5
(1)问题的实质是求一个数组序列中的两个连续元素之间的最大差值,还需要考虑首尾的特殊性;
(2)我为了练习set集合容器,所以使用了set来存储路灯位置,当然你也可以使用vector容器。
相对于vector容器,其好处是元素不重复,自动排序,劣势就是迭代器不支持算术加减操作,只支持自增++和自减–操作。
测试通过的源码:
set>
iomanip>
intn=0,l=0;
set<
lampPos;
//默认升序排列
n>
l){
intpos=0;
n;
pos;
lampPos.insert(pos);
intmaxDistance=0;
for(set<
:
iteratorit=lampPos.begin();
it!
=--lampPos.end();
++it){
iteratornextIt=++it;
--it;
if((*nextIt-*it)>
maxDistance)
maxDistance=*nextIt-*it;
floatd=(float)maxDistance/2;
//考虑第一个路灯到路的开始位置
if(*lampPos.begin()>
d)
d=*lampPos.begin();
//考虑最后一个路灯到路的结束
if(l-*(--lampPos.end())>
d=l-*(--lampPos.end());
lampPos.clear();
setiosflags(ios:
fixed)<
setprecision
(2)<
d<
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 网易 笔试 编程 讲解