今天去面试面试官出了如下题目:
1、证明所有奇数的平方减1都为8的倍数
//我当时的思路反了,后来经面试官提示思路如下
所有奇数都可以表示为 2m+1 (m为一个整数)
那么如上题目可以表示为如下式子
(2m+1)2–1 //继续拆分
4m2+4m+1–1
4m2+4m
4(m2+m)
到这里只需证明括号内是一个偶数即可
1—如果m为奇数那么m2和m则均为奇数两个奇数之和一定是偶数
2—如果m为偶数那么m2和m则均为偶数两个偶数之和也是偶数
偶数可以用2n(n为整数)来表示,则上述可写为
4*2n=8n
由此可以证明所有奇数的平方减1均为8的倍数
2、有一个数列 1,1,2,3,5,8,13…….n 写程序求第n个数是多少。
看到题目首先想到用递归函数实现,代码如下:
{
for
(
int
i
=
0
; i
<
20
; i
++
)
{
Console.WriteLine(GetN(i));
}
Console.Read();
}
private
static
int
GetN(
int
num)
{
if
(num
<
2
)
{
return
1
;
}
else
{
return
GetN(num
–
2
)
+
GetN(num
–
1
);
}
}
面试官看后说要求用for循环实现代码如下:
private
static
int
GetN(
int
num)
{
int
tmp1
=
0
, tmp2
=
0
;
for
(
int
i
=
0
; i
<=
num; i
++
)
{
if
(i
<
2
)
{
tmp1
=
1
;
tmp2
=
1
;
}
else
{
tmp2
=
tmp1
+
tmp2;
tmp1
=
tmp2
–
tmp1;
}
}
return
tmp2;
}
3、f(n) = 1-2+3-4+5-6……..n 写函数求f(n)的值
分析:当n为偶数时 f(n) = (1-2)+(3-4)+(5-6)….. 如前也就是两个数的和为-1共有n/2组,结果为f(n) = -n/2
当n为奇数时 f(n) = (1-2)+(3-4)+(5-6)+7…如果去掉最后一个奇数那么与上边结果一样那么f(n) = -(n-1/2)+n
代码如下:
static
int
GetFN(
int
n)
{
return
n
%
2
==
0
?
–
n
/
2
: n-( n-1
/
2)
;
}



