计算斐波那契数最小差值,合法括号序列判断

目录

1.计算斐波那契数最小差值

2.合法括号序列判断


hello,这里是bangbang,今天是很简单的2道题。 日积跬步,以致千里!

1.计算斐波那契数最小差值

计算斐波那契数最小差值_牛客题霸_牛客网 (nowcoder.com)

解题思路:

1.模拟出斐波那契数列

        使用3个数f,f1=0,f2=1(斐波那契数列前2个数字是0和1,后面的数是前两项求和)循环模拟实现出斐波那契数列,f是当前的斐波那契数。

2.寻找到离输入数字最近的2个斐波那契数(小于输入数字或者大于等于输入数字)

3.min(输入数字-较小的斐波那契数,较大的斐波那契数-输入数字),即求出最小差值 

代码实现:

#include <iostream>
using namespace std;

int main() {
   int f,f1=0,f2=1;     //Fib
   int n,left=0,right=0;//left是离n最近的较小Fib,right是离n最近的较大Fib
   cin>>n;
   while(1)
   {
        f=f1+f2;
        f1=f2;
        f2=f;
        if(f<n)
        {
            left=f; //跟着循环更新至最近的较小Fib
        }
        else {
            right=f;//最近的较大的Fib
            break;
        }
   }
   cout<<min(n-left,right-n)<<endl;
   return 0;
}

2.合法括号序列判断

合法括号序列判断__牛客网 (nowcoder.com) 

解题思路:看到这种匹配的题立马可以想到使用栈,栈的特性:后入先出,符合括号的匹配原则。

1.遍历字符串

2.出现'(’入栈,')'出栈(若栈此时不为空),为空说明没有匹配的')',此时之间返回false。

3.出现其他字符,直接返回false,因为题目只进行括号匹配 

4.最后判断栈是否为空,为空说明全部匹配,返回true,上面出现3种操作,我们可以使用switch语句进行分支。

代码实现:

class Parenthesis {
public:
    bool chkParenthesis(string A, int n) {
        stack<char>st;
        for(auto ch:A)
        {
            switch(ch)
            {
                case '(':             //'('入栈
                    st.push(ch);
                    break;
                case ')':             //')'出栈
                    if(st.empty())    //为空说明没有匹配的'('
                    {
                        return false;
                    }
                    st.pop();         //不为空,正常出栈
                    break;
                default:              //其他字符,返回false
                    return false;
            }
        }
        return st.empty();            //最终栈为空,说明全部匹配成功返回true
    }
};

猜你喜欢

转载自blog.csdn.net/bang___bang_/article/details/131815572