HDU5083-BC15-B

来源:互联网 发布:软路由软件 编辑:程序博客网 时间:2024/06/18 18:03

学习大神们开始写题解。也有助于自己的思路整理

废话:今天第一状态算是不错,第一题没有像上次那样由于物理不好WA10+发还不对。。。。但是这道难度不大的模拟自己还是注意不好细节。。。。比赛时间没做出来,关键是对Error的处理。

思路:简单粗暴的模拟,注意关键是对Error的处理。

程序如下:细节地方已用注释标记

传送门:http://http://acm.hdu.edu.cn/showproblem.php?pid=5083

官方题解:http://http://bestcoder.hdu.edu.cn/

#include<cstdio>#include<cstring>#include<iostream>#include<string>#include<cstdlib>using namespace std;string ADD="000001";string SUB="000010";string DIV="000011";string MUL="000100";string MOVE="000101";string SET="000110";string num[40]={"","00001","00010","00011","00100",   "00101","00110","00111","01000",   "01001","01010","01011","01100",   "01101","01110","01111","10000",   "10001","10010","10011","10100",   "10101","10110","10111","11000",   "11001","11010","11011","11100",   "11101","11110","11111"};string s;int dischange(int i,int j)//由已知数据为5位二进制,则可以输入i,j作为起止位置求其十进制{int num=0,k;for(k=i;k<=j;k++)num=num*2+s[k]-48;//注意字符与数字的区别return num;}void no(){cout<<"Error!\n";}int main(){//freopen("input.txt","r",stdin);int type;while(cin>>type){cin>>s;if (type==1){int flag=0;if (s=="ADD") cout<<ADD;else if (s=="SUB") cout<<SUB;else if (s=="DIV") cout<<DIV;else if (s=="MUL") cout<<MUL;else if (s=="MOVE") cout<<MOVE;else if (s=="SET") flag=1;if (flag==0){int number;getchar();//处理空格getchar();//处理逗号scanf("%d",&number);cout<<num[number];getchar();getchar();scanf("%d",&number);cout<<num[number];printf("\n");}else{cout<<SET;int number;getchar();getchar();scanf("%d",&number);cout<<num[number];printf("00000\n");//处理b数字}}else{int flag=0;string s0;s0=s.substr(0,6);//自己的基础不扎实,函数不熟悉int num1=dischange(6,10);int num2=dischange(11,15);if (s0=="000001")if (num1&&num2) printf("ADD R%d,R%d\n",num1,num2);else no();else if (s0=="000010")if (num1&&num2) printf("SUB R%d,R%d\n",num1,num2);else no();else if (s0=="000011")if (num1&&num2) printf("DIV R%d,R%d\n",num1,num2);else no();else if (s0=="000100")if (num1&&num2) printf("MUL R%d,R%d\n",num1,num2);else no();else if (s0=="000101")if (num1&&num2) printf("MOVE R%d,R%d\n",num1,num2);else no();else if (s0=="000110")if (num1&&!num2) printf("SET R%d\n",num1);else no();else no();//所有的其他的情况都是不符合题意的}}return 0;}


0 0