IGT笔试

来源:互联网 发布:晓风网贷软件 编辑:程序博客网 时间:2024/04/29 17:52

今天去IGT进行了一个小时的笔试,做的是应届生的C++题目,一共10题。

题目都是全英文的,作答也应该用英文,我答的很不好。

1、在32位和64位情况下,不同基本数据类型和指针的sizeof大小输出

2、条件编译程序段段 和 普通程序段的区别

3、虚表和虚指针的概念,和相互关系

4、函数指针的应用

5、基类和派生类的构造函数和析构函数的先后问题

6、进程和线程的区别和关系

7、vector 的capacity()和size()函数的区别

8、描述c++的三个特点

9、单链表的reverse操作的算法实现

10、程序实现数学组合的所有组合输出


假设我们的集合为{1,2,3} ,我们从头扫描集合的元素,第一个元素为1。对于这个元素,我们可以把他放到组合集中,然后在剩下的集合里再去选择;也可以不把他放到组合集中,在剩下的集合里去选择元素放到组合集中。一般化的,假设我们的集合有n个元素,要求m个元素的组合。我们扫描每一个元素,针对该元素,我们可以将其放到组合集中,然后在剩下的n-1个元素中再选择m-1个元素;我们也可以不放该元素进集合,而直接从剩下的n-1个元素中选择m个元素。这已经是非常清晰的递归的思想了,具体代码如下。

void combination(char *src,int num, vector<char>& result)
{
    if(num==0)
    {
        vector<char>::iterator iter=result.begin();
        for(;iter<result.end();iter++)
        {
            printf("%c",*iter);
        }
        printf("\n");
        return;
    }
    if(*src=='\0') return;
    result.push_back(*src);
    combination(src+1,num-1,result);
    result.pop_back();
    combination(src+1,num,result);
}

void all_sub_set(char *src)
{
    assert(src);
    if(!src) return;
    int i=0;
    int len=strlen(src);
    vector<char> result;


    for(i=1;i<=len;i++)
    {
        combination(src,i,result);
    }
}