数据结构_stack
2024-08-29 16:08:35
问题描述
一天,小 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
#include <stdio.h>
#include <stdlib.h>
#include <string.h> #define MAXN 1001 int arr[MAXN]={};
int len=; void in()
{
int num;
scanf("%d",&num);
getchar();
arr[len++]=num;
} void pop()
{
if(len>)
len--;
} void asub()
{
if(len>=)
{
int num = arr[len-]-arr[len-];
arr[len-] = num> ? num : -num;
len--;
}
} void copy()
{
if(len>)
{
arr[len] = arr[len-];
len++;
}
} int getSum()
{
int i,sum=;
for(i=;i<len;i++)
{
sum+=arr[i];
}
return sum;
} //void _disAll()
//{
// int i;
// for(i=0;i<len;i++)
// printf("%d ",arr[i]);
// printf("\n");
//} int main()
{
int i=;
int opnum=;
char op[]={}; scanf("%d",&opnum);
getchar();
for(i=;i<opnum;i++)
{
scanf("%s",op);
if(strcmp(op,"IN")==)
{
in();
}
else if(strcmp(op,"POP")==)
{
pop();
}
else if(strcmp(op,"ASUB")==)
{
asub();
}
else if(strcmp(op,"COPY")==)
{
copy();
}
//else printf("OP ERROR");
// _disAll();
}
printf("%d\n",getSum()); return ;
}
最新文章
- IO多路复用之epoll总结
- jquery实现图片预加载
- paip.广告过滤系统 php 实现
- Swift XML解析库 - SwiftyXMLParser
- 大数据之ETL设计详解
- wx.html2.WebView在 target=";_blank"; or rel=";external"; 没有反映的解决方法
- mac os 显示文件列表命令 ls -a
- IE8上传文件时文件本地路径变成";C:\fakepath\";的问题
- VBS基础篇 - FileSystemObject对象
- Spring整合CXF,发布RSETful 风格WebService(转)
- Windows 8.1 归档 —— Step 2 对新系统的少量优化
- ARM编译器4字节对齐
- Sicily1099-Packing Passengers-拓展欧几里德算法
- HTML 5 Audio/Video DOM buffered 属性
- android 在EditText中显示表情图片
- JS复习:第七章
- HTML的语法
- javasrcipt的作用域和闭包(二)
- vscode编辑Markdown时的贴图工具
- LeetCode:151_Reverse Words in a String | 字符串中单词的逆反 | Medium