每日一题 | day07(Fibonacci数列 | 合法括号序列判断)

选择题

1、下列程序段执行后,输出d的值为()

void main()
{
     
	int a=1,b=0,c=-1,d=0;
	d=++a||++b&&++c;
	cout<<d<<endl;
	return;
}

A 1
B 2
C 3
D 0

正确答案 A:1、计算++a,a的值为2;2、判断||,此时左边的值为真,也就是a为非0的数,就不会去判断||右边的式子,所以此语句是为真,将结果赋予给d,所以d就为1

2、有如下类模板定义:已知b1,b2是BigNumber的两个对象,则下列表达式中错误的是?

template<class T> 
class BigNumber
{
     
	long n;
public:
	BigNumber(T i):n(i){
     }
	BigNumber operator+(BigNumber b)
	{
     
		return BigNumber(n+b.n);
	}
};

A 3+3
B b1+3
C b1+b2
D 3+b1

正确答案 D:A选项就是内置类型的相加,没问题;C选项类中的第二个函数就是重载了+号,第二个参数为该类的对象;B选项虽然第二个参数是整形,但是这里会调用+运算符重载函数,因为这里的3会形参单参构造,也就是一个匿名对象,满足了该函数的的原型;D选项是内置类型+自定义类型,内置类型并没有重载+号,所以错误

编程题

题目1
每日一题 | day07(Fibonacci数列 | 合法括号序列判断)_第1张图片
解题思路
这道题考察的是斐波那契数列,斐波那契数列除了前两项,都要满足以下公式:F[i] = F[i-1]+F[i-2]。也就是第三项等于前两项之和。明白了什么是斐波那契数列后我们再来看题目内容。要求给定一个N,求出这个数走多少步就可以成为斐波那契数。其实也就是数N和斐波那契数列中哪个数字更相近,求出与最相近的那个数的差值。我们举个例子
每日一题 | day07(Fibonacci数列 | 合法括号序列判断)_第2张图片
我们可以找出比N小的左数,比N大的右数,例如这里的左数就是8,右数就是13,分别与N做差,差值最小的的差值就是我们想要的结果

代码

#include 
using namespace std;

int main()
{
     
	int f;
	int f1 = 0;
	int f2 = 1;
	int N, left, right;
	cin >> N;
	while (1)
	{
     
		f = f1 + f2;
		f1 = f2;
		f2 = f;
		//找到作数
		if (f <= N)
		{
     
			left = f;
		}
		else
		{
     	//右数
			right = f;
			break;
		}
	}
	cout << min(N - left, right - N) << endl;
	return 0;
}

题目2

每日一题 | day07(Fibonacci数列 | 合法括号序列判断)_第3张图片
解题思路
借助一个栈,遇到左括号就入栈,遇到右括号时前面就必须有左括号,也就是栈不能为空,如果此时栈不为空,就将栈顶元素出栈。
几种不匹配的方式:
1、字符串的长度不是偶数
2、遇到右括号时栈为空,多出右括号
3、循环完后栈不为空,多出左括号
4、遇到非左右括号字符,直接返回false
代码

class Parenthesis {
     
public:
    bool chkParenthesis(string A, int n)
    {
     
    	//长度不为偶数
        if (n % 2 == 1)
            return false;
        stack<char> st;
        for (int i = 0; i < n; ++i)
        {
     
        	//左括号入栈
            if (A[i] == '(')
                st.push(A[i]);
            //右括号并且栈不为空
            else if (A[i] == ')' && !st.empty())
                st.pop();
            else //遇到其他字符或者多出右括号
                return false;
        }
        //左括号必须完全匹配完,栈不为空则表示多出左括号
        if (st.empty())
            return true;
        return false;
    }
};

你可能感兴趣的:(每日一题,字符串,栈)