学到两个:

//ignore \n

cin.ignore();

//ignore a line

cin.ignore(1024, '\n');

#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
#include<iterator>
#include<cstring> //uva 10033 Problem G: Interpreter
#define ONLINE_JUDGE using namespace std;
int regs[10];
int ram[1000]; int steps;
int pc=0;
int oper, arg1, arg2; void load_ram()
{
steps=0;
pc=0;
memset(regs, 0 ,sizeof(regs));
memset(ram, 0 ,sizeof(ram));
//string s;
char s[5];
int i=0;
//for(int i=0;getline(cin, s)&&s.length();i++)
for(int i=0;fgets(s, sizeof(s), stdin);i++)
{
if(s[0]=='\n')
{
// printf("\\n \n");
break;
}
//ram[i]=atoi(s.c_str());
ram[i]=atoi(s);
#ifndef ONLINE_JUDGE
cout<<ram[i]<<endl;
#endif
} } void decode()
{
oper=ram[pc]/100;
arg1=ram[pc]/10%10;
arg2=ram[pc]%10;
pc++; steps++;
#ifndef ONLINE_JUDGE
printf("steps %d pc %d: %d %d %d\n", steps, pc-1, oper, arg1, arg2);
#endif } void run()
{
while(1)
{
decode();
switch(oper)
{
//halt
case 1:
goto END;
break;
//2dn means set register d to n (between 0 and 9)
case 2:
regs[arg1]=arg2;
break;
//3dn means add n to register d
case 3:
regs[arg1]+=arg2;
regs[arg1]%=1000;
break;
//4dn means multiply register d by n
case 4:
regs[arg1]*=arg2;
regs[arg1]%=1000;
break;
//5ds means set register d to the value of register s
case 5:
regs[arg1]=regs[arg2];
break;
//6ds means add the value of register s to register d
case 6:
regs[arg1]+=regs[arg2];
regs[arg1]%=1000;
break;
//7ds means multiply register d by the value of register s
case 7:
regs[arg1]*=regs[arg2];
regs[arg1]%=1000;
break;
//8da means set register d to the value in RAM whose address is in register a
case 8:
regs[arg1]=ram[regs[arg2]];
break;
//9sa means set the value in RAM whose address is in register a to the value of register s
case 9:
ram[regs[arg2]]=regs[arg1];
break;
//0ds means goto the location in register d unless register s contains 0
case 0:
if(regs[arg2]!=0)
pc=regs[arg1];
break;
default:
break;
} }
END:
return; } int main()
{
int n;
bool first=true;
char instr[5]={0};
//cin>>n;
scanf("%d", &n);
//ignore \n
//cin.ignore();
fgets(instr, sizeof(instr), stdin);
memset(instr, 0, sizeof(instr)); //ignore a line
//cin.ignore(1024, '\n');
fgets(instr, sizeof(instr), stdin);
while(n-- >0)
{
load_ram();
run(); if(!first)
printf("\n");
printf("%d\n", steps);
first=false;
} return 0;
}

PC/UVa 题号: 110106/10033 Interpreter (解释器)题解 c语言版的更多相关文章

  1. PC/UVa 题号: 110105/10267 Graphical Editor (图形化编辑器)题解

    #include<cstdio> #include<iostream> #include<string> #include<algorithm> #in ...

  2. PC/UVa 题号: 110104/706 LC-Display (液晶显示屏)题解

    #include <string> #include <iostream> #include <cstring> #include <algorithm> ...

  3. PC/UVa 题号: 110101/100 The 3n+1 problem (3n+1 问题)

     The 3n + 1 problem  Background Problems in Computer Science are often classified as belonging to a ...

  4. 23、Interpreter 解释器模式

    1.Interpreter 解释器模式 解释器模式是一种使用频率相对较低但学习难度较大的设计模式,它用于描述如何使用面向对象语言构成一个简单的语言解释器.在某些情况下,为了更好地描述某一些特定类型的问 ...

  5. 二十三、Interpreter 解释器模式

    设计: 代码清单: Node public abstract class Node { public abstract void parse(Context context) throws Parse ...

  6. 设计模式15:Interpreter 解释器模式(行为型模式)

    Interpreter 解释器模式(行为型模式) 动机(Motivation) 在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变 ...

  7. uva题库爬取

    每次进uva都慢的要死,而且一步一步找到自己的那个题目简直要命. 于是,我想到做一个爬取uva题库,记录一下其中遇到的问题. 1.uva题目的链接是一个外部的,想要获取https资源,会报出SNIMi ...

  8. 【OCP|052】OCP最新题库解析(052)--小麦苗解答版

    [OCP|052]OCP最新题库解析(052)--小麦苗解答版 OCP最新题库解析历史连接(052):http://mp.weixin.qq.com/s/bUgn4-uciSndji_pUbLZfA ...

  9. emlog 百度熊掌号提交插件-基于Emlog6.0.1特别版美化

    插件截图 插件简介 此插件在发布文章的时候自动向百度熊掌号提交,有利于百度熊掌号收录.基于Emlog6.0.1特别版美化的插件. 在百度推送插件的基础上修改制作而成与百度推送共存,解放双手,走向人生巅 ...

随机推荐

  1. 最简单的视音频播放示例3:Direct3D播放YUV,RGB(通过Surface)

    上一篇文章记录了GDI播放视频的技术.打算接下来写两篇文章记录Direct3D(简称D3D)播放视频的技术.Direct3D应该Windows下最常用的播放视频的技术.实际上视频播放只是Direct3 ...

  2. .Net中的各种序列化

    我们知道将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本这正是数据持久化所要做的.而且,不同应用程序之间的通讯需要相互传输数据.那么序列化和反序列化正是为此而生. 序列化和反序列化 所谓 ...

  3. Squid 反向代理加速网站

    本实例的域名是 wenjin.cache.ibm.com.cn,通过DNS的轮询 技术,将客户端的请求分发给其中一台 Squid 反向代理服务器处理,如果这台 Squid 缓存了用户的请求资源,则将请 ...

  4. mysql大内存高性能优化方案

    mysql优化是一个相对来说比较重要的事情了,特别像对mysql读写比较多的网站就显得非常重要了,下面我们来介绍mysql大内存高性能优化方案 8G内存下MySQL的优化 按照下面的设置试试看:key ...

  5. j2ee的13个标准

    1:JDBC(Java Database Connectivity)JDBC API为访问不同数据库提供了统一的路径,向ODBC一样,JDBC开发者屏蔽了一些细节问题,另外,JDBC对数据库的访问也具 ...

  6. mysql使用经验总结

    在工作中难免会遇到一些这个问题那个问题,当然在mysql中也不例外.今天就让我们来学学mysql中一些比较常用的东西  . 1.有时我们想去查某张表中的字段,但是表中的数据多,字段也很多,如果用sel ...

  7. Linux iostat监测IO状态

    Linux iostat监测IO状态 http://www.orczhou.com/index.php/2010/03/iostat-detail/

  8. metadata lock

    1 锁等待的例子 session 1: 执行查询但不提交 mysql> begin; mysql> select * from test where c2 = '1'; session 2 ...

  9. CXF之六 自定义拦截器

    CXF已经内置了一些拦截器,这些拦截器大部分默认添加到拦截器链中,有些拦截器也可以手动添加,如手动添加CXF提供的日志拦截器.也可以自定义拦截器,CXF中实现自定义拦截器很简单,只要继承Abstrac ...

  10. 在Ubuntu下安装Apache

    在Ubuntu下安装软件其实非常方便,Ubuntu提供了apt-get工具,可以使用该工具直接下载安装软件. 在Linux里,系统最高权限账户为root账户,而默认登录的账户并非root账户,例如不具 ...