UVa 11956 : Brainfuck
UVa演習 2014/6/8 (日) 問5
問題リンク : http://uva.onlinejudge.org/external/119/11956.html
問題概要 :
ポインタと長さ100の配列があり、ポインタは最初配列の0を示し、配列の各要素には初期値として0が入っている
命令の列が与えられるので、その後の配列の各要素の値を16進数で出力せよ
解法:
その通りにやる
ただ、'.'は使わない(書いてある意味が分からない)
コード:
#include<bits/stdc++.h> #define REP(i,s,n) for(int i=s;i<n;i++) #define rep(i,n) REP(i,0,n) using namespace std; int mem[100]; int main(){ int T,CNT=1; string opr; cin >> T; cin.ignore(); while( T-- ){ getline(cin,opr); rep(i,100) mem[i] = 0; int pointer = 0; rep(i,(int)opr.size()){ if( opr[i] == '>' ) ( pointer += 1 ) %= 100; if( opr[i] == '<' ) ( pointer += 99) %= 100; if( opr[i] == '+' ) ( mem[pointer] += 1 ) %= 256; if( opr[i] == '-' ) ( mem[pointer] += 255 ) %= 256; } cout << "Case " << CNT++ << ":"; rep(i,100) printf(" %02X",mem[i]); puts(""); } return 0; }