AOJ : 0228 - Seven Segments (7セグメント)

問題概要

http://rose.u-aizu.ac.jp/onlinejudge/ProblemSet/description.jsp?id=0228&lang=jp
日本語の問題文なので説明省略です.

アルゴリズム

前回に表示した数字の状態を記憶しておく.
その状態から, 現在表示すべき数字に変化させるために, 2進数のどの桁を変化させたらいいかを調べるだけ.
文字列で管理して, 先頭の文字から順番に調べるだけ.

プログラム

#include <iostream>
using namespace std;

string s[10] = {
  "0111111",
  "0000110",
  "1011011",
  "1001111",
  "1100110",
  "1101101",
  "1111101",
  "0100111",
  "1111111",
  "1101111",
};


int main(void){
  int n;
  while(cin>>n, (n!=-1)){
    string now = "0000000";
    for(int i=0;i<n;i++){
      int x;
      cin>>x;
      string change = "0000000";
      for(int i=0;i<7;i++){
        if(s[x][i] != now[i]){
          change[i] = '1';
        }
      }
      cout<<change<<endl;
      now = s[x];
    }
  }

  return 0;
}