笔试2:禾赛科技

静态局部变量概念。

继承体系中派生类构造函数的调用,虚函数机制。

数组名取地址的意义以及指针常量和常量指针的概念。

指针常量指的是指针指向的内容不可变;常量指针指的是指针本身不可变。

解释:(int)(pf[8])(double *);

自定义string类,并实现构造函数、赋值运算符函数(要求能够输入任意二进制字符,即非法字符串和‘\0’)

class MyString
{
public:
    MyString();
    MyString(const char *s);    //构造函数
    MyString(const char *s, int l);
    MyString& operator = (const MyString &st);    //赋值运算符
    friend ostream&operator<<(ostream &os,const MyString&st){os<<st.str;return os;}
private:
    char *str;    //字符串
    int len;       //字符串长度
}
MyString::MyString(const char *s)
{
    len = strlen(str);
    str = new char[len+1];
    strcpy(str,s);
}

MyString::MyString(const char *s, int l)
{
    len = l;
    str = new char[len + 1];
    for (int i = 0; i < l + 1; ++i)
    {
        str[i] = s[i];
    }
}

MyString& MyString::operator=(const MyString & st)
{
    if(this==&st)
        return *this;
    delete []str;    //清空内存
    len = st.len;
    str = new char[len+1];
    strcpy(str,st.str);
    return *this;
}

关于\0的讨论:
从const char*创建string时,指针指向的数组必须以空字符结尾,拷贝操作遇到空字符时停止。如果传递给构造函数一个计数值,数组就不必以空字符结尾。
标准string的构造函数string::basic_string(const char *_Ptr,size_t _Count);可以实现如下操作:

char *s = "abcde\0fg";
string str(s,9);
cout<<str<<endl;    //输出:abcde  fg

然而上面重载构造函数,虽然能够将"abcde\0fg"传递给str成员,但是重载的<<又不能像标准string一样直接输出。

vector容器自定义排序算法,相关结构体如下:

struct Student{
string name;
string class;
bool male;
double score;
};
extern vector<Student>vecStudent;    //所有学生信息

要求相同班级同学在一起;每个班中女在前男在后,按照分数降序排序,如果分数相同则按照姓名首字母字典序排列。完成排序后打印前n个同学的姓名和分数。

小端电脑,将一个浮点数按照大端模式放在buffer中发送出去,实现转换函数。

unsigned char buffer[4]={0};
void convert(float a,unsigned char buffer[]);

约瑟夫环问题。

唔,剑指offer用std::list的方式在牛客里面超时了。

int ysf(int n, int m)
{
    if (n < 0 || m < 1)
        return 0;
    list<int>st;
    for (int i = 1; i <= n; ++i)
        st.emplace_back(i);
    auto iter = st.begin();
    while (st.size() > 1)
    {
        for (int i = 1; i < m; i++)
        {
            iter++;
            if (iter == st.end())
                iter = st.begin();
        }
        iter = st.erase(iter);
        if (iter == st.end())
            iter = st.begin();
    }

    return st.back();;
}

安静的自己构造的循环单链表:

int ysf(int n, int m) {
        ListNode *p=new ListNode(1);
        ListNode *q=p;
        for(int i=2;i<=n;++i)
        {
            ListNode *r = new ListNode(i);
            q->next=r;
            q=r;
        }
        q->next=p;    //此时,构成环形链表
        while(p->next!=p)
        {
            for(int i=1;i<m;++i)
            {
                q=p;            //单链表,需要记录前一个结点
                p=p->next;
            }
            q->next=p->next;    //删除结点
            p=q->next;
        }
        return p->val;
    }
全部评论
老哥这是你后期回忆出来的吗,这不是都答上来了么.....
点赞 回复 分享
发布于 2021-04-27 01:53
老哥 这是算法岗的题吗
点赞 回复 分享
发布于 2023-03-20 17:00 北京
请问问答题是文字简答吗
点赞 回复 分享
发布于 2023-12-22 14:52 上海

相关推荐

02-22 21:16
已编辑
门头沟学院 运营
牛客928043833号:离了你谁还拿我当个宝
点赞 评论 收藏
分享
02-08 15:53
门头沟学院 Java
CoderEcho:让公司知道便宜没好货
点赞 评论 收藏
分享
评论
2
11
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客企业服务