笔试总结(一)

c++岗位基础知识

  • c++中函数有三种传递方式:值传递,指针传递,引用传递
  • 描述"A小于B或小于C"的表达式为:
  • 用new申请某一个类的动态对象数组时,在该类中必须能够匹配到默认构造函数,否成程序会产生一个编译错误
  • 举出c++中自定义的数据类型:class,struct,enum,union
  • 简述成员函数,全局函数,和友元函数的差别
  • 结构struct 和类class有什么区别
  • 析构函数有什么作用
  • 拷贝构造函数在哪几种情况下调用
  1. 用类的一个对象去初始化另一个对象时
  2. 当函数的形参是类的对象时(也就是值传递时),如果是引用传递则不会调用
  3. 当函数的返回值是类的对象或引用时
  • 类与对象有什么区别
  1. 类和对象(class)是两种以计算机为载体的计算机语言的合称。对象是对客观事物的抽象,类是对对象的抽象。类是一种抽象的数据类型。
  2. 它们的关系是,对象是类的实例,类是对象的模板。对象是通过new className产生的,用来调用类的方法;类的构造方法

 

编程题:


int Num0fstr(char *Mstr, char *substr)
{
    int number = 0;
	char *p;//字符串辅助指针
	char *q;//字符串辅助指针
	while(*Mstr != '\0')
	{
		p = Mstr;
		q = substr;
		while((*p == *q)&&(*p!='\0')&&(*q!='\0'))
		{
			p++;
			q++; 
		} 
		if(*q=='\0')
		{
			 number++; 
		}
		Mstr++;
	}
	return number;   

}

判断链表有没有环

bool hasCycle(listnode *head)
{
	if(head==NULL)
		return;

	listnode *fast;
	listnode *slow;
	fast=slow=head;
	while(slow!=NULL&&fast!=NULL)
	{
		if(fast==slow)
		{
			return true;
		}
		slow =slow ->next ;
		fast =fast ->next;
		if(fast->next !=NULL )
			fast=fast->next ;
	}
	return false;

}

台阶题:问题描述:一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共需要多少种跳法。

//递归 算法
#include <stdio.h>
#include <iostream>
int fun(int n)
{
	if(n==0)
		return 0;
	if(n==1)
		return 1;
	if(n==2)
		return 2;
	return fun(n-1)+fun(n-2);
}
int main()
{
	printf("%d\n",fun (4));

}

题目二:变态跳台阶。
一个台阶总共有n级,如果一次可以跳1级,也可以跳2级……它也可以跳上n级。此时该青蛙跳上一个n级的台阶总共有多少种跳法?

 


//递归
long long Fib(int n)
{
    if (n == 0)
        return 0;
    if (n == 1)
        return 1;
    if (n == 2)
        return 2;
    else
        return (2 * Fib(n - 1));
}

逆波兰数:

如果遇到数字就压入栈中,如果遇到符号,就取出两个栈中的元素进行运算,然后把运算结果再压入栈中,最后的栈顶元素(也是唯一元素)就是结果。

class Solution {
public:
    int evalRPN(vector<string>& tokens) {
        if(tokens.size()==1) return stoi(tokens[0]);
        stack<int> s;
        for(int i=0;i<tokens.size();i++){
            if(tokens[i]!="+" && tokens[i]!="-" && tokens[i]!="*" && tokens[i]!="/")
                s.push(stoi(tokens[i]));
            else{
                int nums1 = s.top();
                s.pop();
                int nums2 = s.top();
                s.pop();
                if(tokens[i]=="+") s.push(nums2+nums1);
                if(tokens[i]=="-") s.push(nums2-nums1);
                if(tokens[i]=="*") s.push(nums2*nums1);
                if(tokens[i]=="/") s.push(nums2/nums1);
            }
        }
        return s.top();
    }
};


 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值