一.用位运算实现加法
int add(int a, int b)
{
if (b==0)
return a;
else
return add(a^b, ((a&b)<<1));//记得(a&b)要加括号, 我笔试的时候忘记加了
}
二.确定cpu的大小端方式
笔试的时候此题做错了, 竟用移位去做. 对于此操作, 移位不起作用.
int main()
{
int a= 0x01020304;
std::cout<<(int)*((char*)&a);//输出4为小端法, 最低有效字符在前面
}
三.图的深度遍历
笔试的时候没有写出来, 写出思路为利用栈一个个结点压入. 直到栈顶那个结点无指向子链接或连接已遍历过或指向的链接的结点已在栈当中为止. 然后出栈访问. 代码有空再实现.
四. F(1) =F(2)=1, F(n)=F(n-1)+F(n-2) 求F(n)
int f(int n)
{
if (n<=0) return 0;
if (n==1 || n==2) return 1;
int a[3]={1,1,1};//笔试的时候 a[3]={1}; 结果运行的时候数组是1,0,0导致结果出错
for (int i=3; i<=n; i++)
{
a[i%3]=a[(i-1)%3]+a[(i-2)%3];
}
return a[n%3];
}