1068: zdw的编译器(模拟题,里面要注意括号配对)

1068: zdw的编译器

时间限制: 1 Sec  内存限制: 128 MB
提交: 28  解决: 10
[ 提交][ 状态][ 讨论版]

题目描述

zdw参照某种语言的灵感,自创了一种语言,名字叫:AK语言(因为他总能AK)

AK语言非常简单,只包含8个符号,以下是关于这种语言的介绍:

> 当前指针向右移动

< 当前指针向左移动

+ 指针指向的字节数值增加1

- 指针指向的字节数值减少1

? 等待用户输入字符存入当前指针指向的内存单元

: 输出当前指针指向的内存单元的值在ASCII码表中对应的符号

{ 如果内存所指向的内存单元存储的值为0,则跳转到对应的}符号的后一条语句,否则继续执行

} 如果内存所指向的内存单元存储的值不为0,则跳转到对应的{符号的后一条语句,否则继续执行

//想必大家也明白,{ }这两个符号总是成对出现。{ 会与哪个 }配对应该不用多解释了==

现在zdw有一个问题。给你一段AK程序,你能否输出这段程序会输出的结果?

输入数据:一行字符串,长度小于3000,表示一个完整的AK程序

如果所给的AK程序有要求输入的话,将会在输入文件第二行开始给出。

输出:这段AK程序会输出的结果

对于30%的数据,没有{和}这两种符号

对于另30%的数据,没有?符号

对于100%的数据,表示AK程序的字符串长度小于3000,该AK程序使用内存不超过1000个字节

数据保证不会访问负下标内存,程序开始时,指针指向地址为0的内存单元。且数据输入的程序使用内存不会超过1000个字节。

注意:如果不是选手故意,数据给定的AK程序不会运行太多步,也就是几乎不会超时。(除非交了个while(true)什么的)(或者说直接按照程序正常解释执行即可, 不需要加编译优化)

样例1:

INPUT

++++++++++{>+>+++>+++++++>++++++++++<<<<-}>>>++:>+:+++++++::+++:<<++:>+++++++++++++++:>:+++:------:--------:<<+:<:

OUTPUT

Hello World!

样例2:

INPUT

?>??>++++++{<-------->-}<{<+>-}<:

1 2

OUTPUT

3

//样例两个经典程序 Hello World 和 a+b

输入

输出

提示

来源

[ 提交][ 状态]

题意:输入包含 的八种字符的字符串,根据字符的定义,输出相应的结果,输出的字符,注意:+ - 为当前位置的 值加1减1;

这道题一定要注意括号配对;

给出一组数据

输入:

 ++++{>?>++++{<-------->-}<:<-}
abcd 

输出:

ABCD

代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#include<map>
#define INF 0x3f3f3f3f
#define Max 3010
#define ll long long
char str[Max]; 
int a[Max];
int a1[Max],a2[Max]; // 当 str[j] 为括号时,a1,a2数组 存与它的对应的括号的位置; 

int tt[Max]; 
void check(int l)
{
	int i,j;
	int sum = 0;
	for(i = 0;i<l;i++)
	{
		if(str[i]=='{')
		{
			tt[sum++] = i;
		}
		else if(str[i]=='}')
		{
			a1[tt[sum-1]] = i;
			a2[i] = tt[sum-1];
			sum--;
		}  
	}
}
int main()
{
	int i,j;
	char c;
	while(~scanf("%s",str))
	{
				
		getchar();
		int l = strlen(str);
		check(l);
		int red;
		memset(a,0,sizeof(a));
		int top = 0;
		for(i = 0;i<l;i++)
		{
				
			if(str[i]=='+')
				a[top]++;
			else if(str[i]=='-')
				a[top]--;
			else if(str[i]=='{')
			{
				if(a[top]== 0)
				{
					i = a1[i];
				}
				else red = i;
			}
			else if(str[i]=='}')
			{
				if(a[top]!=0)
					i = a2[i];
				else 
					continue;
			}
				
			else if(str[i]=='>')
				top++;
			else if(str[i]=='<')
				top--;
			else if(str[i]=='?')
			{
				scanf("%c",&c);
				a[top] = c;
			}
			else if(str[i]==':')
			{
				printf("%c",a[top]);
			}
		}
		//printf("\n");
	}
	return 0;
}	
	

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
String字符串 [{"RQCount":"4","R_Model":"螺丝","SerialNum":"ZDW23072400599,OWOR,4M27-221-0000-0,1,,,,","R1":"1","R2":"1","R3":"1","R4":"1","R5":"-","L1":"1","ProdType":"4M27-221-0000-0","MoldNum":"10","L2":"1","L3":"1","L4":"1","LT1":"1","L5":"-","LT3":"1","OutputTime":"2023-07-24 16:16:56","LT2":"1","LT5":"-","LT4":"1","RT1":"1","WorkTime":"17","RT3":"1","L_Model":"螺丝","RT2":"1","RT5":"-","RT4":"1","LH1":"1","LH3":"1","LH2":"1","LH5":"-","LH4":"1","WaitMoveTime":"5.8","RH1":"1","LQCount":"4","RH3":"1","RH2":"1","RH5":"-","RH4":"1"},{"RQCount":"4","R_Model":"螺丝","SerialNum":"ZDW23072400600,OWOR,4M27-241-0000-0,1,,,,","R1":"1","R2":"1","R3":"1","R4":"1","R5":"-","L1":"1","ProdType":"4M27-241-0000-0","MoldNum":"12","L2":"1","L3":"1","L4":"1","LT1":"1","L5":"-","LT3":"1","OutputTime":"2023-07-24 16:17:26","LT2":"1","LT5":"-","LT4":"1","RT1":"1","WorkTime":"16","RT3":"1","L_Model":"螺丝","RT2":"1","RT5":"-","RT4":"1","LH1":"1","LH3":"1","LH2":"1","LH5":"-","LH4":"1","WaitMoveTime":"5.5","RH1":"1","LQCount":"4","RH3":"1","RH2":"1","RH5":"-","RH4":"1"},{"RQCount":"4","R_Model":"螺丝","SerialNum":"ZDW23072400601,OWOR,4M27-211-0000-0,1,,,,","R1":"1","R2":"1","R3":"1","R4":"1","R5":"-","L1":"1","ProdType":"4M27-211-0000-0","MoldNum":"1","L2":"1","L3":"1","L4":"1","LT1":"1","L5":"-","LT3":"1","OutputTime":"2023-07-24 16:17:56","LT2":"1","LT5":"-","LT4":"1","RT1":"1","WorkTime":"18","RT3":"1","L_Model":"螺丝","RT2":"1","RT5":"-","RT4":"1","LH1":"1","LH3":"1","LH2":"1","LH5":"-","LH4":"1","WaitMoveTime":"5.4","RH1":"1","LQCount":"4","RH3":"1","RH2":"1","RH5":"-","RH4":"1"}] 转换成List<Map>
最新发布
07-25

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值