**声明,凭记忆写下。如有冒犯公司版权,请通知删除!
笔试题型:
20道单选 40分
3道编程 60分
2道问答 40分
一、单选题
安卓逆向知识:DexClassHeader的内容、快速排序一趟过后的顺序、Anti-Emulator技术、安卓反编译的保护方式、ios迭代、引起ANR的原因
二、编程题
(1)小易最初没有魔法币,但是可以通过魔法机器得到,第一台魔法机器输入x枚魔法币,得到2*x+1枚,第二台魔法器输入x枚银币得到,2*x+2枚。 现给定一个数字n,必须由第一二台魔法器得到。
输出投掷魔法器的顺序(题干中隐含意思是所有银币都要参与交易,不能由2个中拿出一个这样投)
输入:10
输出:122
代码如下
#include <iostream>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//小易投的钱币中,设为N
//n的解决方案为:(1)N位偶数,f(n)=f(n/2-1)+"2"
//(2)n为奇数:f(n)=f(n/2)+"1"
int find(int n)
{ int i;
if(n==1)
{
printf("1");
return 0;
}
else if(n==2)
{
printf("2");
return 0;
}
else if(n%2==0)
{
i=n/2;
i--;
find(i);
printf("2");
return 0;
}
else
{
i=n/2;
find(i);
printf("1");
return 0;
}
}
int main(int argc, char** argv) {
int n;
scanf("%d",&n);
find(n);
return 0;
}
已AC
(2)给定一个数列,请你将它排列成符合如下要求的数列:a[i]*a[i+1]可以被4整除。如果可以排列成这种数列,输出Yes,否则输出No.
输入:
(1)第一行表示有多少测试用例
(2)后面每两行的第一行为数列中数的个数
(3)第二行数为数列
样例输入:
2
3
1 10 100
4
1 2 3 4
样例输出:
Yes
No
代码如下,已AC
#include <iostream>
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
//数列分为2的倍数,4的倍数,以及奇数
//其中2的倍数的最后一个数后面必须是4
//奇数中间必须插4的倍数
//所以满足的条件必须是4的倍数的个数=奇数个数+是否有2
#define MAX 100000
int main(int argc, char** argv) {
int t;
int i;
scanf("%d",&t);
for(i=0;i<t;i++)
{
int n;
int a[MAX];
scanf("%d",&n);
for(int j=0;j<n;j++)
{
scanf("%d",&a[j]);
}
//统计4的倍数,如果不是4的倍数,看是否为奇数
int f4=0;
int istwo=0;//是否有2的倍数
int odd=0;//奇数个数
for(int j=0;j<n;j++)
{
if(a[j]%4==0)
f4++;
else if(a[j]%2==0)
istwo++;
else
odd++;
}
if(istwo!=0)
{
if(f4>=odd)
printf("Yes\n");
else
printf("No\n");
}
else
{
if(f4>=odd-1)
printf("Yes\n");
else
printf("No\n");
}
}
return 0;
}
三、问答题
(1)怎么实现像360助手那样的悬浮框?
答:用windowManager的addView
(2)IOS逆向工具的介绍