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