2022-3-19 京东笔试Android安卓岗(2/2)
第一次笔试,记录一下~
选择
开始32个选择题真的搞蒙了
Android的选择题内容大概有数据结构、Java基础、Android基础、设计模式跟计算机基础(网络),可以说是一点没看,直接凉了。
编程
好像跟前端是一套题,第一题是求余数的一个,第二题是分鸡蛋的题,具体题面不记得了,只说题意、思路跟代码吧
编程题1(分类讨论)
题意:
组询问,每次给出一个
,问在
区间里的数
的最大值。
思路
首先明确,那么
的范围就是
如果区间长度大于的话,那么最大值为
然后如果区间长度小于的话,比较
跟
的值
如果说明区间里的数取余
的值是先增大后减少的,可以取到最大值
否则的话,就是最大值,区间里的值是增大的。
C++代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+7;
ll l[maxn],r[maxn],p[maxn];
int main(){
int _;scanf("%d",&_);
for(int i=1;i<=_;i++) scanf("%lld",&l[i]);
for(int i=1;i<=_;i++) scanf("%lld",&r[i]);
for(int i=1;i<=_;i++) scanf("%lld",&p[i]);
for(int j=1;j<=_;j++){
if(r[j]-l[j]+1>=p[j]) printf("%lld ",p[j]-1);
else{///中间的间距
ll ans=0;
ll tl=l[j]%p[j],tr=r[j]%p[j];
if(tl>tr) ans=max(ans,p[j]-1);
ans=max(ans,tr);
printf("%lld ",ans);
}
}
return 0;
}编程题2 分鸡蛋(贪心)
题意:
简化来说就是组询问,每次给出两个数
,有两种操作:
- 将x+1
- 如果x%3==0,也可以选择将x=x/3
问将x变为y的最小操作次数。
思路
贪心的考虑就可以。
首先明确两种操作的本质,第一种是增大x,第二种是减少x
那么如果x<y的话,肯定是直接选择第一种操作,答案就是y-x
如果是x>y的话,想减少x会选择第二种操作,但是要看x是否被3整除,如果没有被3整除的话就先+1。然后执行第二种操作,直到x<y。再执行第一种操作,让x+1直到x==y。
这样操作次数就是最优的。
C++代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e6+7;
int main(){
int _;scanf("%d",&_);
while(_--){
ll x,y;
scanf("%lld%lld",&x,&y);
///每次+1 或是/3 问x变为y的最小次数
if(x==y){
puts("0");continue;
}
if(y>=x){
printf("%lld\n",y-x);
continue;
}
else{
ll ans=0;
while(x>y){
if(x%3!=0) ans++,x++;
else ans++,x/=3;
}
ans=ans+y-x;
printf("%lld\n",ans);
}
}
return 0;
}
///x=x+1
///x=x/3
///x->y需要多少操作
总结
#京东实习##京东##笔经#基础选择题没有看,而且之前背的八股好像今天也一点没用到,希望京东爸爸给次面试机会吧555555
