zoukankan      html  css  js  c++  java
  • 秋招笔试题总结一

    1.//输入一个字符串,然后逆序输出

    #include<string>
    int main()
    {
        char a[100];
        cin>>a;
        int len=strlen(a);
        for(;len>=0;len--)
        {
            cout<<a[len-1];
        }
        cout<<endl;
        return 0;
    }

    2.windows的内存管理方式

    页式管理,段式管理,段页式管理。
    页式管理的优点是没有外碎片,每个内碎片不超过页的大小。缺点是,程序全部装入内存,要求有相应的硬件支持。
    段式管理优点是可以分别编写和编译,可以针对不同类型的段采用不同的保护,可以按段为单位来进行共享,包括通过动态链接进行代码共享。缺点是会产生碎片。
    段页式管理是段式管理与页式管理方案结合而成的所以具有他们两者的优点。但反过来说,由于管理软件的增加,复杂性和开销也就随之增加了。
     
    3.//联合体和结构体的内存分布
    union X
    {
        class S{
        public:
            char s1;
            char s2;
            char s3;
        }s;
        static const char c='e';
    }x;
    int main()
    {
        x.s.s1='a';
        x.s.s2='b';
        x.s.s3='c';
        x.s.s1=x.c;
        cout<<x.s.s1<<endl;
        cout<<sizeof(x)<<endl;
        return 0;
    }

    4.指针与引用的区别

    指针是一个实体,引用是个别名

    引用使用时无需解引用(*),指针需要解引用

    引用只能在定义时被初始化一次,之后不可改变,指针可变

    引用没有const,指针有const

    引用不能为NULL,指针可以为NULL

    sizeof引用,得到的是所指变量(对象)的大小,而sizeof指针,得到的是指针本身(所指的变量或对象的地址)的大小

    和引用的自增(++)运算意义不一样

    在内存分配上,程序为指针变量分配内存区域,而引用不需要分配内存区域

    5.25个人5个赛道,至少比赛几场可以得到前三名?

       七场

     6.100个真硬币,1个假硬币,一个无砝码的天平,真假币不一样重,至少用几次天平可以判断真币重,还是假币重?
    第一种方法:
    把硬币分成50,50,1。 
    称50与50,如果平衡,则这两堆为真币,剩下的1为假币。再用这个假币和真币称一下得结论。 
    若不平衡,则1为真币,接着判断假币在哪个堆里面。 
    取轻的1堆,分成25,25,称重。若平衡则假币在另一堆里面,假币重。 
    若不平衡,则假币在这一堆中,假币轻
     第二种方法:
    把硬币分成33,33,34。 
    称33与33,如果平衡,则这两堆为真币,假币在第三堆中。从66中取出34与第三堆进行称,第三堆所在的天平的那一端的轻重就是假币的轻重情况。 
    若不平衡,则假币在这两堆中。取下轻的一堆,从34里面取出33替换,称量。如果平衡,代表取下的那一堆中有假币,假币是轻的。如果不平衡,代表取下的那一堆是真币,假币是重的
     
     7.模拟strcpy
    #include<assert.h>
    char* Strcpy(char*dest,const char*src)
    {
        assert(dest!=NULL && src!=NULL);
        char* ret=dest;
        while((*dest++ = *src++)!='');
        return ret;
    }

    8.冒泡排序及其优化

    //int* BubbleSort(int a[],int size)
    //{
    //    int i=size;
    //    while(i)
    //    {
    //        for(int j=0;j<i-1;j++)
    //        {
    //            if(a[j]>a[j+1])
    //                swap(a[j],a[j+1]);
    //        }
    //        i--;
    //    }
    //    return a;
    //}
    
    int* BubbleSort1(int a[],int size)
    {
        int i=size;
        bool isExchange=true;
        while(i && isExchange)
        {
            isExchange=false;
            for(int j=0;j<i-1;j++)
            {
                if(a[j]>a[j+1])
                {
                    swap(a[j],a[j+1]);
                    isExchange=true;
                }
            }
            i--;
        }
        return a;
    }
    void Test()
    {
        int ar[]={1,3,5,7,9,2,4,6,8,0};
        int*p=BubbleSort1(ar,10);
        for(int i=0;i<10;i++)
        {
            cout<<p[i]<<" ";
        }
        cout<<endl;
    }
    int main()
    {
        Test();
        return 0;
    }
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    安心下来做技术,笑是最大的福气
  • 相关阅读:
    POJ 2752 Seek the Name, Seek the Fame
    POJ 2406 Power Strings
    对闭包的理解(closure)
    HDU
    Python字典遍历的几种方法
    面向对象的六大原则
    Android添加代码检查权限
    Android请求网络权限
    android广播接收器BroadcastReceiver
    Android中SQLite下 Cursor的使用。
  • 原文地址:https://www.cnblogs.com/JN-PDD/p/7700407.html
Copyright © 2011-2022 走看看