UVa 10033 - Interpreter
来源:互联网 发布:新手怎么学好网络优化 编辑:程序博客网 时间:2024/06/18 17:49
题目:给你一些指令,RAM地址从0-999,寄存器编号0-9,从RAM的000开始读取数据,判断指令执行了多少条次。
100 运行结束6ds 寄存器d的值加上寄存器s的值2dn 设置寄存器d的值为n(0-9)7ds 寄存器d的值乘以寄存器s的值3dn 寄存器d的值加上n8da 设置寄存器d的值为RAM中以寄存器a的值为地址的单元的值4dn 寄存器d的值乘以n9sa 设置RAM中以寄存器a的值为地址的单元的值为寄存器s的值5ds 设置寄存器d的值为寄存器s的值0ds 如果寄存器s中不是0,则程序跳转到寄存器d中地址分析:模拟题,汇编解析器。直接模拟即可。
说明:注意操作方向不要写反。
#include <stdio.h>#include <stdlib.h>#include <string.h>#define op0(a) (a/100)#define op1(a) (a/10%10)#define op2(a) (a%10)int RAM[1000];int reg[10];int run( void ){int now = 0,count = 1;while ( 1 ) {int op = RAM[now ++];switch ( op0(op) ) {case 0 : if ( reg[op2(op)] ) now = reg[op1(op)]; break;case 1 : if ( !op1(op) && !op2(op) ) return count; break;case 2 : reg[op1(op)] = op2(op); break;case 3 : reg[op1(op)] = (reg[op1(op)]+op2(op))%1000; break;case 4 : reg[op1(op)] = (reg[op1(op)]*op2(op))%1000; break;case 5 : reg[op1(op)] = reg[op2(op)]; break;case 6 : reg[op1(op)] = (reg[op1(op)]+reg[op2(op)])%1000; break;case 7 : reg[op1(op)] = (reg[op1(op)]*reg[op2(op)])%1000; break;case 8 : reg[op1(op)] = RAM[reg[op2(op)]]; break;case 9 : RAM[reg[op2(op)]] = reg[op1(op)]; break;default: printf("command:%03d\n"); printf("runtime error!\n"); system("pause");break;}count ++;}}int main(){int T;while ( scanf("%d",&T) != EOF ) {getchar();getchar();while ( T -- ) {memset( RAM, 0, sizeof(RAM) );memset( reg, 0, sizeof(reg) );int in_count = 0;char buf[10];while ( gets(buf) ) {if ( !strcmp(buf,"") ) break;sscanf(buf,"%d",RAM+in_count);in_count ++;}printf("%d\n",run());if ( T ) printf("\n");}}return 0;}
0 0
- UVa 10033 - Interpreter
- UVa 10033 Interpreter
- UVa 10033 - Interpreter
- UVa Problem Solution: 10033 - Interpreter
- UVA 10033Interpreter (模拟)
- UVa Problem 10033 Interpreter (解释器)
- UVa Problem 10033 Interpreter (解释器)
- 10033 - Interpreter
- 10033 - Interpreter
- Interpreter
- Interpreter
- Interpreter
- Interpreter
- Interpreter pattern
- Interpreter Injection
- JavaScript Interpreter
- Interpreter Files
- Interpreter 模式
- 重建控制文件的语法
- Python--线程样式
- java收集内存堆栈信息命令
- openwrt luci 实现框架
- NGINX模块开发 之 验证URL参数
- UVa 10033 - Interpreter
- 用JS获取地址栏参数的方法(超级简单)
- 新手必看,关于ARM的22个常用概念!
- 具体化生活
- 在 Eclipse 中结合 IBM WebSphere Application Server 使用
- ios学习开源代码系列(一)LHLoadingView
- Python--Socket样例
- 读书笔记
- 8259DMA interrupt