2011-06-01 22:47:09Morris

d632. C and S ??

http://zerojudge.tw/ShowProblem?problemid=d632

內容 :

有一天,小明在網路上看到一種神奇的魔法

根據小明的推測,這種魔法似乎是一種數學布林函數

這個函數是長這樣的:

輸入部分:

 A、B和C

輸出部分:

S 和 C'

S =  A xor B xor C

C' = (A and B) or (B and C) or (C and A)

小明將好多個這種函數當成丸子般串起來

 附圖

並且把兩個布林數列代進去

神奇的事情發生了...

當A為0010

   B為0011

所得到的S數列竟然是0101!!!

//==================

小明今天想做實驗,看看代入不同的A和B,所得到的S數列是長什麼樣子

輸入說明 :

給定兩個數列A和B(AB兩者長度皆為32)

輸出說明 :

S數列

範例輸入 :

00000000000000000000000000001100
00000000000000000000000000001101

範例輸出 :

00000000000000000000000000001100
00000000000000000000000000001101
---------------------------------
00000000000000000000000000011001
****End of Data******************

提示 :

背景知識: logic

FA.

*目前測資還很弱,以後將會變難

出處 :

xatier (管理:pscd)

看不懂題目,但是輸入兩個二進制數,相加後輸出

/**********************************************************************************/
/*  Problem: d632 "C and S ??" from xatier                                        */
/*  Language: C                                                                   */
/*  Result: AC (10ms, 270KB) on ZeroJudge                                         */
/*  Author: morris1028 at 2011-05-30 21:26:19                                     */
/**********************************************************************************/


#include<stdio.h>
main() {
    char A[33], B[33];
    while(scanf("%s %s", A, B) == 2) {
        int a, b, S[33] = {};
        printf("%s\n%s\n", A, B);
        puts("---------------------------------");
        for(a = 31; a >= 0; a--) {
            S[a] += A[a] + B[a] - 2 * '0';
            if(S[a] >= 2) S[a-1] += S[a]/2, S[a] %= 2;
        }
        for(a = 0; a <= 31; a++)
            printf("%d", S[a]);
        puts("");
        puts("****End of Data******************");
    }
    return 0;
}