题目一: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再异或1为1
1异或0为1再异或0为1
0异或1为1再异或1为0
0异或0为0再异或0为0
==>a异或b再异或b为a