面试遇到的面试题分析

今天去面试面试官出了如下题目:

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个数是多少。
     看到题目首先想到用递归函数实现,代码如下:
    

             static void Main(string[] args)        
        {
            
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
代码如下:
private   static   int  GetFN( int  n)
{
    
return  n  %   2   ==   0   ?   - /   2  : n-( n-1 / 2) ;
}

转载于:https://www.cnblogs.com/heimirror/archive/2011/03/15/1985523.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值