zoukankan      html  css  js  c++  java
  • 数据结构_stack

    问题描述

    一天,小 L 发现了一台支持一下操作的机器:
    IN x:将整数 x 入栈
    POP:将栈顶元素出栈
    ASUB:出栈两个数,将两数差的绝对值入栈
    COPY:将栈顶元素(如果有的话)复制一份,入栈
    现在小 L 想知道经过给定的 n 次操作之后,栈内所有元素之和是多少。
    Notice:这台机器会自动忽略不合法的操作。


    数据输入
    第一行一个正整数 n,表示有 n 次操作。
    接下来有 n 行,每行一个操作。
    0<=n<=1000, 0<=x<=1000


    数据输出
    输出这台机器在 n 次操作后, 栈内所有元素之和。


    样例

    输入:

    4

    IN 10

    IN 11

    ASUB

    COPY

    输出

    2

    思路

      用数组模拟栈。应注意非法忽略操作

    code

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 
     5 #define MAXN 1001
     6 
     7 int arr[MAXN]={0};
     8 int len=0;
     9 
    10 void in()
    11 {
    12     int num;
    13     scanf("%d",&num);
    14     getchar();
    15     arr[len++]=num;
    16 }
    17 
    18 void pop()
    19 {
    20     if(len>0)
    21         len--;
    22 }
    23 
    24 void asub()
    25 {
    26     if(len>=2)
    27     {
    28         int num = arr[len-2]-arr[len-1];
    29         arr[len-2] = num>0 ? num : -num;
    30         len--;
    31     }
    32 }
    33 
    34 void copy()
    35 {
    36     if(len>0)
    37     {
    38         arr[len] = arr[len-1];
    39         len++;
    40     }
    41 }
    42 
    43 int getSum()
    44 {
    45     int i,sum=0;
    46     for(i=0;i<len;i++)
    47     {
    48         sum+=arr[i];
    49     }
    50     return sum;
    51 }
    52 
    53 //void _disAll()
    54 //{
    55 //    int i;
    56 //    for(i=0;i<len;i++)
    57 //        printf("%d ",arr[i]);
    58 //    printf("
    ");
    59 //}
    60 
    61 int main()
    62 {    
    63     int i=0;
    64     int opnum=0;
    65     char op[10]={0};
    66     
    67     scanf("%d",&opnum);
    68     getchar();
    69     for(i=0;i<opnum;i++)
    70     {
    71         scanf("%s",op);
    72         if(strcmp(op,"IN")==0)
    73         {
    74             in();
    75         }
    76         else if(strcmp(op,"POP")==0)
    77         {
    78             pop();
    79         }
    80         else if(strcmp(op,"ASUB")==0)
    81         {
    82             asub();
    83         }
    84         else if(strcmp(op,"COPY")==0)
    85         {
    86             copy();
    87         }
    88         //else printf("OP ERROR");
    89 //        _disAll();
    90     }
    91     printf("%d
    ",getSum());
    92     
    93     return 0;
    94 } 
  • 相关阅读:
    BUU MISC 刷题记录 (一)
    BUU MISC 刷题记录(三)
    2021/8/18 随笔(区间互质)
    2021/8/17随笔
    连通图与Tarjan算法
    【tarjan/v-DCC】Redundant Paths POJ
    ACM OJ常见错误以及解决方法
    【鸽巢原理】Halloween treats HDU
    frp&nps实现socks5代理
    零组文库签到+腾讯云函数+钉钉推送
  • 原文地址:https://www.cnblogs.com/cbattle/p/7655862.html
Copyright © 2011-2022 走看看