• NBUT 1450 Blitzcrank


    • [1450] Blitzcrank

    • 时间限制: 1000 ms 内存限制: 65535 K
    • 问题描写叙述
    • Blitzcrank is a robot.

      There are some pretty good registers(寄存器) in Blitzcrank's body.

      There are some instructions about register A and register B:

      1.ADD A, B means a += bThe machine code is 80 AF BF.

      2.ADD A, A means a += aThe machine code is F0 AF.

      3.ADD B, B means b += bThe machine code is F0 BF.

      4.ADD B, A means b += aThe machine code is 80 BF AF.

      Now give you the values in register A and register B and some machine codes. You should calculate out the final value in register A and register B after operating the machine code.

    • 输入
    • The frist line contains an integer T, means there are T test cases.
      For each test case, the first line contains two integers means the initial value of the register A and the register B in hexadecimal(十六进制).
      The next line contains a series of hexadecimal numbers.
    • 输出
    • For each test case, print the register A and register B's value in hexadecimal.
    • 例子输入
    • 2
      A1 B2
      80 AF BF F0 AF
      B2 B3
      F0 AF F0 BF
    • 例子输出
    • 2A6 B2
      164 166
      
    • 提示
    • The first case's machine codes 80 AF BF F0 AF is composed of ADD A, B and ADD A, A.
    • 来源
    • Monkeyde17

      这题目事实上挺水的,我写着题的目的主要是想分享一下刚学到的超神string和stringstream的使用方法。

      这题目是说给出两个十六进制的数A和B,通过输入特定字符串进行操作。相同用十六进制输出操作后的A和B。
      详细操作为:

      1.当输入“80 AF BF”时,a += b。

      2.当输入“F0 AF”时。a += a.

      3.当输入“F0 BF”时b += b

      4.当输入“80 BF AF”时。b += a. 


      这题主要就是考察字符串的处理。

      用普通的方法能够非常快敲出来:

      #include<cstring>
      #include<cstdio>
      #include<cmath>
      const int mx=1e6+10;
      char s[mx];
      int a,b,l;
      
      int main() {
          int t;
          scanf("%d",&t);
          while(t--) {
              scanf("%X %X",&a,&b);
              getchar();
              gets(s);        //因为操作次数不确定,所以用scanf难以控制,则用gets比較方便
              l=strlen(s);
              int i=0;
              while(i<l)
              {
                  if(s[i]=='8')
                  {
                      if(s[i+3]=='A' )
                          a+=b;
                      else if(s[i+3]=='B')
                          b+=a;
                      i+=9;
                  }
                  else if(s[i]=='F')
                  {
                      if(s[i+3]=='A')
                          a+=a;
                      else if(s[i+3]=='B')
                          b+=b;
                      i+=6;
                  }
              }
              printf("%X %X
      ",a,b);      //此处的%x和%X要区分开。用大写输出的字母就是大写,用小写就输出小写字母
          }
          return 0;
      }
      

      只是这个代码不是我要展示的重点,我认为特别奇妙的是string

      /*
      Author:ZXPxx
      Memory: 268 KB		Time: 343 MS
      Language: G++		Result: Accepted
      */
      
      #include<cstring>
      #include<iostream>
      #include<sstream>
      #include<cstdio>
      using namespace std;
      stringstream sbuf;
      int main() {
          int t;
          scanf("%d",&t);
          while(t--)
          {
              int A,B;
              string str,op,a,b;
              cin>>hex>>A>>B;
              sbuf.clear();
              cin.ignore();
              getline(cin,str);
              sbuf<<str;
              while(sbuf>>op)
              {
                  if(op=="80")
                  {
                      sbuf>>a>>b;
                      if(a=="AF")
                          A+=B;
                      else
                          B+=A;
                  }
                  else
                  {
                      sbuf>>a;
                      if(a=="AF")
                          A+=A;
                      else
                          B+=B;
                  }
              }
              printf("%X %X
      ",A,B);
          }
          return 0;
      }
      

      就像处理整形数据一样,好方便啊……
  • 相关阅读:
    h5移动开发css
    js 小数相加异常
    h5上滑刷新(分页)
    js中的 !!
    图片懒加载(延迟加载)原理及实现
    作用域内优先级及this指针
    函数的属性、方法和构造函数
    判断是否为严格模式
    匿名函数递归调用自身
    闭包
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/6888282.html
Copyright © 2020-2023  润新知