「AOJ再挑戦36~40」の編集履歴(バックアップ)一覧はこちら

AOJ再挑戦36~40 - (2014/01/28 (火) 10:31:49) の1つ前との変更点

追加された行は緑色になります。

削除された行は赤色になります。

*問36 A Figure on Surface http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0036 おかれたブロックを判定する問題。 解法 ブロックの一番上で一番左のブロックを基準に、その右3マス下3マスのブロックの状態をビットにして判断します。 解いたのでほかの人のコードも見ましたが私は平均的なコードでした。 一位のコードはもはや異次元、数学みたいなコードでなにがなにやら? #include<stdio.h> #include<string.h> char blockType(char test[12][12],int r,int c){ int pow2=1,sum=0; for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ if(test[r+i][c+j]=='1'){ sum+=pow2; } pow2*=2; } } char re; if(sum==27)re='A'; if(sum==73)re='B'; if(sum==7)re='C'; if(sum==9)re='D'; if(sum==51)re='E'; if(sum==153)re='F'; if(sum==11)re='G'; return re; } int main(){ char board[12][12]; int r,c; memset(board,0,sizeof(board)); while(1){ r=c=-1; if(scanf("%s",board[0])==EOF)break; for(int i=1;i<8;i++){ scanf("%s",board[i]); for(int j=8;j<12;j++)board[i][j]='\0'; } for(int i=0;i<8;i++){ for(int j=0;j<8;j++){ if(r==-1&&board[i][j]=='1'){ r=i; c=j; } } } printf("%c\n",blockType(board,r,c)); } }
*問36 A Figure on Surface http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0036 おかれたブロックを判定する問題。 解法 ブロックの一番上で一番左のブロックを基準に、その右3マス下3マスのブロックの状態をビットにして判断します。 解いたのでほかの人のコードも見ましたが私は平均的なコードでした。 一位のコードはもはや異次元、数学みたいなコードでなにがなにやら? MOD演算の概念を使ってる雰囲気だけど読み解けなかった。 #include<stdio.h> #include<string.h> char blockType(char test[12][12],int r,int c){ int pow2=1,sum=0; for(int i=0;i<3;i++){ for(int j=0;j<3;j++){ if(test[r+i][c+j]=='1'){ sum+=pow2; } pow2*=2; } } char re; if(sum==27)re='A'; if(sum==73)re='B'; if(sum==7)re='C'; if(sum==9)re='D'; if(sum==51)re='E'; if(sum==153)re='F'; if(sum==11)re='G'; return re; } int main(){ char board[12][12]; int r,c; memset(board,0,sizeof(board)); while(1){ r=c=-1; if(scanf("%s",board[0])==EOF)break; for(int i=1;i<8;i++){ scanf("%s",board[i]); for(int j=8;j<12;j++)board[i][j]='\0'; } for(int i=0;i<8;i++){ for(int j=0;j<8;j++){ if(r==-1&&board[i][j]=='1'){ r=i; c=j; } } } printf("%c\n",blockType(board,r,c)); } }

表示オプション

横に並べて表示:
変化行の前後のみ表示: