第9回ブルーブリッジカップc++(大学B組)

2977 ワード

2.タイトル:コード
漢字の字形はワードライブラリに存在し,今日でも16ドットマトリクスのワードライブラリが広く用いられている.16ドットマトリクスのライブラリは,漢字ごとに16 x 16画素の情報と見なしている.これらの情報をバイトに記録します.
1バイトに8ビットの情報が格納され、32バイトで漢字の字形が格納されます.バイトごとに2進数表示に変換し、1は墨跡、0は地色を表す.1行あたり2バイト、合計16行、レイアウトは:
1バイト目、2バイト目、3バイト目、4バイト目…31バイト目、32バイト目
この問題はあなたに複数の漢字からなる情報をあげて、各漢字は32バイトで表して、ここでバイトを記号のある整数の値として与えました.
テーマの要求はこれらの情報に隠されている.あなたの任務はこれらの漢字の字形を復元し、そこからテーマの要求を見て、要求に応じて答えを記入することです.
このメッセージは(全部で10文字): 4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0 16 64 16 64 34 68 127 126 66 -124 67 4 66 4 66 -124 126 100 66 36 66 4 66 4 66 4 126 4 66 40 0 16 4 0 4 0 4 0 4 32 -1 -16 4 32 4 32 4 32 4 32 4 32 8 32 8 32 16 34 16 34 32 30 -64 0 0 -128 64 -128 48 -128 17 8 1 -4 2 8 8 80 16 64 32 64 -32 64 32 -96 32 -96 33 16 34 8 36 14 40 4 4 0 3 0 1 0 0 4 -1 -2 4 0 4 16 7 -8 4 16 4 16 4 16 8 16 8 16 16 16 32 -96 64 64 16 64 20 72 62 -4 73 32 5 16 1 0 63 -8 1 0 -1 -2 0 64 0 80 63 -8 8 64 4 64 1 64 0 -128 0 16 63 -8 1 0 1 0 1 0 1 4 -1 -2 1 0 1 0 1 0 1 0 1 0 1 0 1 0 5 0 2 0 2 0 2 0 7 -16 8 32 24 64 37 -128 2 -128 12 -128 113 -4 2 8 12 16 18 32 33 -64 1 0 14 0 112 0 1 0 1 0 1 0 9 32 9 16 17 12 17 4 33 16 65 16 1 32 1 64 0 -128 1 0 2 0 12 0 112 0 0 0 0 0 7 -16 24 24 48 12 56 12 0 56 0 -32 0 -64 0 -128 0 0 0 0 1 -128 3 -64 1 -128 0 0
これは空欄の問題です.
この問題は私をだまして、実は1バイトに8ビットのバイナリ数があって、1行ごとに2バイトで、32バイトは1つの漢字を構成して、すべて補数で表す整数値です.負の数については、まず絶対値の元のコードを求めて、逆を取って逆コードになって、補コードを得ると、いいです.出力の10字は:9の9回の方はいくらですか?答え:387420489コード:
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include 
#include
using namespace std;
#define ll long long
#define eps 0.001
#define INF 0x3f3f3f3f
#define PI acos(-1.0)
#define memset(a,b) memset(a,b,sizeof(a))
int a[15][40];
int b[20];
int main()
{
    for(int i=1; i<=10; i++)
        for(int j=1; j<=32; j++)
           cin>>a[i][j];

    int flag;
   for(int i=1;i<=10;i++)
     for(int j=1;j<=32;j++){
        memset(b,0);
        flag=0;
        if(a[i][j]<0){
            a[i][j]=-a[i][j];
            flag=1;
        }
        int base=128;
        for(int k=1;k<=8;k++){
            if(a[i][j]>=base){
                a[i][j]-=base;
                b[k]=1;
            }
            base/=2;
        }
        if(flag==1){
            b[1]=1;
            for(int k=2;k<=8;k++){
                if(b[k]==0)
                    b[k]=1;
                else
                    b[k]=0;
            }
            //for(int k=1;k<=8;k++)
            //    cout<=2;k--){
                if(b[k]==1)
                    b[k]=0;
                else{
                    b[k]=1;
                    break;
                }
            }
        }
        for(int k=1;k<=8;k++){
          if(b[k]==1)
           cout<