面试后记(C++)

题目一:1-3+5-7+.....+101;

main()

{

    int i, t=1, s=0; //s是最后的结果

    for(i =0; i<=101; i=i+2)

    {

        t=______1_____;

        s=s+t;

        t=______2_____;

    }

}

答案应该是:1、t*i;2、-t/i    (第二空具体错在需要除个i,因为在第一空时就t已经改变了不再是1或者-1,而是i或者-i,平常我会直接把for里面的第一二条语句合成为一条:s=s+t*i,这样t在这里不会改变所以就只需要接下来写一个:t=-t 即可。其实毕竟笔试没有调试过程就比较难去发现这个平时习惯导致的错误,以后笔试还是试试代入数据吧)


题目二:不用中间变量交换两个数据

当时写的答案是:void Swap(int &a,int &b)

                          {

                                a=a+b;

                                b=a-b;

                                a=a-b;

                          }

其实现在想想,其实应该把模板函数写上的,毕竟也没说具体数据类型,当然对于弱类型语言的话就不用了,他也没说一定用什么语言

template <class classType>

void Swap(classType &a, classType &b) 

{

    a=a+b;

    b=a-b;

    a=a-b;

}

另外一种位运算的解法:

void Swap(int &a,int &b) 

{

    a=a^b;

    b=a^b;

    a=a^b;

}

假设一下:a是11100,b是00111,那么结果过程是a=11011=>b=11100=>a=00111

1异或1为0再异或11

1异或0为1再异或01

0异或1为1再异或10

0异或0为0再异或00

==>a异或b再异或b为a

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值