2014年4月14日月曜日

会津大学オンラインジャッジ 問128 Abacus

Abacus
http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0128
そろばんを題材にした問題。

この問題そろばんを90度回して、全部*で埋めている状態から*を削ってそろばんの一つの列(90度まわしてるから行だけど)を生成すると考えると綺麗に解けます。
というか昔の自分はそうやって解いたようです。


うーんAOJの問題を復習中なのですが昔の自分のコードに勝てる気がしない。
Prolog言語のやりすぎでなんでも列挙する方向だけから考えるという悪い癖がついたな。
昔の自分のほうがアプローチが柔軟だ。



昔のコード。
#include<stdio.h>
#include<string.h>
void change(int num,char* re){
    //*をけずって一列を作る処理
    strcpy(re,"**=*****");
    re[-(num/5-1)]=' ';
    re[num%5+3]=' ';
}
int main(){
    char ans[5][9];
    int n,c=0;
    while(scanf("%d",&n)!=EOF){
        printf("%s",c==0?"":"\n");
        c++;
        for(int i=4;i>=0;i--){
            change(n%10,ans[i]);
            n/=10;
        }
        //縦と横を元に戻して表示
        for(int i=0;i<8;i++){
            for(int j=0;j<5;j++)printf("%c",ans[j][i]);
            printf("\n");
        }
    }
}

0 件のコメント:

コメントを投稿