【C/C++牛客每日必刷】--- 牛客刷题系列

简介: 【C/C++牛客每日必刷】--- 牛客刷题系列

题目:AB1 【模板】栈✨


描述✨


请你实现一个栈。


操作:

push x:将 加x\x 入栈,保证 x\x 为 int 型整数。

pop:输出栈顶,并让栈顶出栈

top:输出栈顶,栈顶不出栈


输入描述✨:

第一行为一个正整数 n\n ,代表操作次数。(1 \leq n \leq 100000)(1≤n≤100000)

接下来的 n\n ,每行为一个字符串,代表一个操作。保证操作是题目描述中三种中的一种。


输出描述✨:

如果操作为push,则不输出任何东西。

如果为另外两种,若栈为空,则输出 "error“

否则按对应操作输出。


示例1✨

输入:

6

push 1

pop

top

push 2

push 3

pop

复制

输出:

1

error

3


题解代码✨:


#include<stdlib.h>
#include<string.h>
#define MAX 100000
typedef struct Stack{
    int a[MAX];
    int topp;
}*LStack;
void inistack(LStack s){
    s->topp=0;
}
void push(LStack s,int x){
    s->a[s->topp]=x;
    s->topp++;
}
int pop(LStack s){
    if(s->topp==0){
        return -1;
    }
    return s->a[--s->topp];
}
int top(LStack s){
    if(s->topp==0){
        return -1;
    }
    int num=s->a[--s->topp];
    s->topp++;
    return num;
}
int main(){
    LStack s=(LStack)malloc(sizeof(struct Stack));
    inistack(s);
    int n=0;
    scanf("%d",&n);
    while(n--){
        char *str=(char*)malloc(6*sizeof(char));
        scanf("%s",str);
        if(!strcmp(str,"push")){
            int num=0;
            scanf("%d",&num);
            push(s,num);
        }
        if(!strcmp(str,"pop")){
            int num1=pop(s);
            if(num1==-1){
    printf("error\n");
    continue;
    }
            printf("%d\n",num1);
        }
        if(!strcmp(str,"top")){
            int num2=top(s);
            if(num2==-1){
    printf("error\n");
    continue;
    }
            printf("%d\n",num2);
        }
    }
    return 0;
}

题目:NC65 斐波那契数列🎉


描述🎉


大家都知道斐波那契数列,现在要求输入一个正整数 n ,请你输出斐波那契数列的第 n 项。

斐波那契数列是一个满足 fib(x)=\left{

1x=1,2 fib(x−1)+fib(x−2)x>2

1x=1,2 fib(x−1)+fib(x−2)x>2

\right.fib(x)={

1

fib(x−1)+fib(x−2)


x=1,2

x>2

的数列

数据范围:1\leq n\leq 401≤n≤40

要求:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n) ,本题也有时间复杂度 O(logn)O(logn) 的解法


输入描述🎉:

一个正整数n


返回值描述🎉:

输出一个正整数。


示例🎉:

输入:4

返回值:3

说明:

根据斐波那契数列的定义可知,fib(1)=1,fib(2)=1,fib(3)=fib(3-1)+fib(3-2)=2,fib(4)=fib(4-1)+fib(4-2)=3,所以答案为3。


示例2

输入:1

返回值:1


示例3

输入:2

返回值:1


解题代码🎉:


/**
 * 
 * @param n int整型 
 * @return int整型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
int Fibonacci(int n ) {
    // write code here
      int a[50];
    a[1]=1,a[2]=1;
    for(int i=3;i<n+1;i++)
    {
        a[i]=a[i-1]+a[i-2];//这里一定要避免出现a[-1]等的情况
    }
    return a[n];
}


目录
相关文章
|
存储 C++
CCF小白刷题之路---202009-3 点亮数字人生(C/C++ 100分)
CCF小白刷题之路---202009-3 点亮数字人生(C/C++ 100分)
185 0
CCF小白刷题之路---202009-3 点亮数字人生(C/C++ 100分)
|
C++
【牛客刷题】带你在牛客刷题第六弹(C/C++基础)
哈喽,今天是我们牛客刷题训练第五弹,今天我们来刷一些C/C++的问题,这些问题相对于你刚学习C/C++基础来说会很好的帮助自己理解,我相信,只要我们一步步去分析,肯定是可以得到正确的答案的,来我们一起加油。
81 0
【牛客刷题】带你在牛客刷题第六弹(C/C++基础)