分享

鼎桥 笔试

 wlk8611 2012-06-15

http://blog.sina.com.cn/s/blog_48a795420100n6gk.html

最近准备面试,昨天做了几道网上搜的鼎桥面试大题。发出来给有需要的朋友看下。

1:编程实现将任意的十进制整数转换成R进制数(R在2-16之间)。 
#include <iostream.h>

void main()
{
    int a[100],i=0,d;
    cout<<"please input number:\n";
    cin>>d;//输入要转化的十进制数
    while(d!=0)//除二取余法
    {
  a[i]=d%2;
  d=d/2;
  i++;
    }
 //输出转化结果
    for(i--;i>=0;i--)
  cout<<a[i];
}


2:请定义一个宏,比较两个数a、b的大小,不能使用大于、小于、if语句。 

#define Max(a,b) ((a-b)==abs(a-b))? a:b

3:有一个整数n,写一个函数f(n),返回0到n之间出现的\"1\"的个数。比如f(13)=6,现在f(1)=1,问下一个最大的f(n)=n的n是什么? 

#include <iostream>

using namespace std;

 

int CountForSingleNumber(int number)

{

         int count=0;

         do

         {

                   if(number==1)

                   {

                            count++;

                   }

                   number=(number-number)/10;

         }

         while(number!=0);

         return count;

}

void main()

{

         int N=100000;///这个N貌似要取到很大才能得到结果

         int totalCount=1;

         for(int i=2;i<N;i++)

         {

                   totalCount+=CountForSingleNumber(i);

                   if(i==totalCount)

                   {

                            cout<<i<<endl;

                            break;

                   }

         }

}
4:任何一个自然数m的立方均可写成m个连续奇数之和。例如: 
  1^3=1 

  2^3=3+5 

  3^3=7+9+11 

  4^3=13+15+17+19 

编程实现:输入一自然数n,求组成n3的n个连续奇数。 
#include<stdio.h> //具体思想是先通过数学方法求出m与n间的关系
int main()
{long n,i,m;
 printf("Enter number:\n");
 scanf("%ld",&n);
 m=(n*n-n)/2;
 printf("%d^3=");
 for(i=1;i<2*n-1;i+=2)
 {printf("%d+",2*m+i);}
 printf("%d\n",2*m+i);
 getch();
 return 0;
}

 

5:写一个方法,在JAVA,C/C++源代码中,检查花括弧(是“(”与 “)”,“{”与“}”)是否匹配,若不匹配,则输出不匹配花括弧所在的行与列。 
#include   <list>  

#include   <iostream>  

#include   <fstream>  

using   namespace   std;   

  void   main()  

  

  fstream   file; //read   source  

  file.open("test.cpp",   ios::in);  

  if(   !file)  

  

  return;  

  

  int   iLineNum    1;  

  char   s; //character    

  list<int>   lstbracket; //{}  

  list<int>   lstParenthesis; //()  

  while(!file.eof())  

  

  file.get(s);  

  if(    ==   '\n'   

  

  //   new   line  

  iLineNum++;  

  

  //   {}  

  if(    ==   '{')  

  

  lstbracket.push_back(iLineNum); //record   linenum  

  

  if(    ==   '}')  

  

  if(   lstbracket.empty())  

  

  cout<<"No   Matching   '}'     in   "<<iLineNum<<endl;  

  

  else  

  

  lstbracket.pop_back();  

  

  

 

  if(    ==   '(')  

  

  lstParenthesis.push_back(iLineNum);  

   

  

  if(    ==   ')')  

  

  if(   lstParenthesis.empty())  

  

  cout<<"No   Matching     ')'   in   "<<iLineNum<<endl;  

  

  else  

  

  lstParenthesis.pop_back();  

  

  

  

  file.close();  

  int     0;  

  for(     0;     lstbracket.size();   i++)  

  

  iLineNum    lstbracket.back();  

  cout<<"No   Matching   '{'   in   "<<iLineNum<<endl;  

  lstbracket.pop_back();  

     

  for(     0;     lstParenthesis.size();   i++)  

  

  iLineNum    lstParenthesis.back();  

  cout<<"No   Matching   '('   in   "<<iLineNum<<endl;  

  lstParenthesis.pop_back();  

     

  cout<<"end"<<endl;    

  }
6:假设现有一个单向的链表,但是只知道只有一个指向该节点的指针p,并且假设这个节点不是尾节点,试编程实现删除此节点。 
将这个指针指向的next节点值copy到本节点,将next指向next->next,并随后删除原next指向的节点。

class node

  int data; 

  node* next;
};
void DelNode(node* p)

 

    node* pTemp p->next;

    memcpy(p, pTemp, sizeof(node));

    p->next pTemp->next;//这一句貌似多余,不过为了稳妥吧

    delete pTemp;
}


7:序列中的“中值记录”指的是:如果将此序列排序之后,它是第n/2个记录。试写出一个求中值记录的算法。 

for(int i=0;i<N;i++)//此题原意可能是用快速排序法,但是简单看了下网上的算法思路,没有写出那个算

                    //法,仅以最原始的方法实现

{

   for(int j=i-1;j>=0;j--)

   {

       if(a[j]<a[j+1])

       {

          double temp=a[j];

          a[j]==a[j+1];

          a[j+1]=temp;

       }

   }

}

8:在你面前有一条长长的阶梯。如果你每步跨2阶,那么最后剩下一阶;如果每步跨3阶,那么最后剩2阶;如果每步跨5阶,那么最后剩4阶;如果每步跨6阶,那么最后剩5阶;如果每步跨7阶,则正好走完。问这个阶梯一共多少阶?编程计算阶梯总共有几阶

#include<iostream>//主要是个数学问题,先求2、3、4、5、6的公倍数

using namespace std;

 

void main()

{

   int N=100000;

   int s=1;

   for(int i=1;i<N;i++)

   {

    s=30*i-1;

        if(s%7==0)

    {

       N=i;

       cout<<s<<endl;

       break;

    }

   }

}

9:设计程序,正确得出13的13次方的后3位。

#include <iostream.h>

void main()//积的后三位只跟乘数与被乘数的后三位有关

{

      int s=1;

      for(int i=0;i<13;i++)

      {

       s=s*13;

       s=s00;

      }

      cout<<s<<endl;

}

 

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约