• 算法与数据结构3.1 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

     
                #include<iostream>
    #include<math.h>
    #include<stack>
    using namespace std;
    int main()
    {
    	int n=0,i=0,temp1=0,temp2=0,temp3=0,temp4=0,sum=0,flag=0;
    	char str[5]={0};
    	stack<int>s;
    	cin>>n;
    	for(i=0;i<n;i++)
    	{
    		cin>>str;
    		if(str[0]=='I')
    		{
    			cin>>temp1;
    			s.push(temp1);
    			temp1=0;
    		}
    		else if(str[0]=='P')
    		{
    			if(s.empty())
    			{
    				continue;
    			}
    			else
    			{
    				s.pop();
    			}
    		}
    		else if(str[0]=='A')
    		{
    			if(s.size()<2)
    			{
    				continue;
    			}
    			else
    			{
    				temp2=s.top();
    				s.pop();
    				temp3=s.top();
    				s.pop();
    				s.push(abs(temp2-temp3));
    				temp2=0;
    				temp3=0;
    			}
    		}
    		else if(str[0]=='C')
    		{
    			if(s.empty())
    			{
    				continue;
    			}
    			else
    			{
    				temp4=s.top();
    				s.push(temp4);
    				temp4=0;
    			}
    		}
    		else
    		continue;
    	}
    	flag=s.size();
    	for(i=0;i<flag;i++)
    	{
    		sum+=s.top();
    		s.pop();
    	}
    	cout<<sum<<endl;
    	return 0;
    } 
            
    
  • 相关阅读:
    linux mysql添加用户
    linux mysql为root用户初始化密码和改变root密码
    linux pts/0的含义
    mysql查看表的结构
    linux踢人命令 pkill踢人用法
    linux查看在线用户 who命令参数及用法
    linux mysql数据库安装(tar.gz)
    vue app外卖(5) 使用swiper 进行图片轮播
    element-UI 点击一行,背景色变化
    vue 外卖app(3) 利用slot分发内容
  • 原文地址:https://www.cnblogs.com/031602523liu/p/7676272.html
Copyright © 2020-2023  润新知