• BestCoder Round#15 1002-Instruction


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

    官方题解——》

    1002 Instruction 先考虑编码,首先找到operation对应的编码,如果是SET就找后面的一个R后面跟着的数字a,令b=0,否则找后面第一个R后面的数字当作a,第二个R后面的数字当作b,最后依次输出operation二进制编码,a, b的二进制编码。 再说解码,先将前6位,中间5位和后面5位转化成十进制记为oid, a, b。如果oid<1||oid>6就是Error!,如果oid<6那么a,b都不能为0,如果oid==6那么a!=0&&b==0。其它情况都是Error!,最后按照oid,a,b输出指令即可。

     下面来代码。。水平有限,比较丑,勿怪-_-|||

      1 #include <stdio.h>

     2 #include <string.h>
     3 #include <math.h>
     4 
     5 int num[33] = {
     6     011011100101110111,
     7     10001001101010111100110111101111,
     8     1000010001100101001110100101011011010111,
     9     1100011001110101101111100111011111011111
    10 };
    11 
    12 int op[10] = {
    13     011011100101110
    14 };
    15 
    16 char op2[7][6] = {
    17     """ADD""SUB""DIV""MUL""MOVE""SET"
    18 };
    19 
    20 
    21 
    22 
    23 int main(){
    24     int type, a, b, i, j, c;
    25     char str[20];
    26     while(scanf("%d", &type) != EOF){
    27         if(type == 1){
    28             scanf("%s ", str);
    29              if(strcmp(str, "ADD") == 0){
    30                 scanf("%*c%d,%*c%d", &a, &b);
    31                 printf("%06d%05d%05d ", op[1], num[a], num[b]);
    32             }
    33             else if(strcmp(str, "SUB") == 0){
    34                 scanf("%*c%d,%*c%d", &a, &b);
    35                 printf("%06d%05d%05d ", op[2], num[a], num[b]);
    36             }
    37             else if(strcmp(str, "DIV") == 0){
    38                 scanf("%*c%d,%*c%d", &a, &b);
    39                 printf("%06d%05d%05d ", op[3], num[a], num[b]);
    40             }
    41             else if(strcmp(str, "MUL") == 0){
    42                 scanf("%*c%d,%*c%d", &a, &b);
    43                 printf("%06d%05d%05d ", op[4], num[a], num[b]);
    44             }
    45             else if(strcmp(str, "MOVE") == 0){
    46                 scanf("%*c%d,%*c%d", &a, &b);
    47                 printf("%06d%05d%05d ", op[5], num[a], num[b]);
    48             }
    49             else if(strcmp(str, "SET") == 0){
    50                 scanf("%*c%d", &a);
    51                 printf("%06d%05d%05d ", op[6], num[a], num[0]);
    52             }
    53         }
    54         else{
    55             scanf("%s", str);
    56             for(c = i = 0; i < 6; i++){
    57                 if(str[i] == '1'){
    58                     c += (int)pow(25 - i);
    59                 }
    60             }
    61             if(c > 6 || c == 0){
    62                 printf("Error! ");
    63                 continue;
    64             }
    65             for(a = 0, i = 6; i < 11; i++){
    66                 if(str[i] == '1'){
    67                     a += (int)pow(210 - i);
    68                 }
    69             }
    70             if(a > 32 || a == 0){
    71                 printf("Error! ");
    72                 continue;
    73             }
    74             for(b = 0, i = 11; i < 16; i++){
    75                 if(str[i] == '1'){
    76                     b += (int)pow(215 - i);
    77                 }
    78             }
    79             if(b > 32){
    80                 printf("Error! ");
    81                 continue;
    82             }
    83             if(c == 6 && b != 0){
    84                 printf("Error! ");
    85                 continue;
    86             }
    87             if(c == 6 && a != 0 && b == 0){
    88                 printf("%s R%d ", op2[c], a);
    89                 continue;
    90             }
    91             if(c > 0 && c < 6 && a != 0 && b != 0){
    92                 printf("%s R%d,R%d ", op2[c], a, b);
    93                 continue;
    94             }
    95             printf("Error! ");
    96         }
    97     }
    98     return 0;
    99 }
  • 相关阅读:
    5 个 Composer 小技巧
    【XRefreshView】打造android万能上拉下拉刷新框架(转载)
    109、FragmentPagerAdapter与FragmentStatePagerAdapter区别
    【动画特效】炫酷动画搜集
    108、【特效】30行代码,打造一个垂直+横向的 双向 ViewPager (转载)
    【特效】Tab --- 标题切换 SmartTabLayout、MagicIndicator
    Mac添加环境变量的三种方法
    107、4种必须知道的Android屏幕自适应解决方案(转载)
    106、抗锯齿方法paint.setAntiAlias(ture);paint.setFilterBitmap(true))
    Android Studio 统计项目的代码总行数(转载)
  • 原文地址:https://www.cnblogs.com/angle-qqs/p/4051151.html
Copyright © 2020-2023  润新知