有一天,小明在網路上看到一種神奇的魔法
根據小明的推測,這種魔法似乎是一種數學布林函數
這個函數是長這樣的:
輸入部分:
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******************
程式碼 :
#include<stdio.h> int main() { int i,carry; char a[33],b[33],s[33]; char line[34] = "---------------------------------"; char end[34] = "****End of Data******************"; while(scanf("%s%s",a,b)==2) { for(i=0; i<32; i++) { a[i] -= '0'; b[i] -= '0'; } carry = 0; for(i=31; i>-1; i--) { s[i] = a[i] ^ b[i] ^ carry; carry = (a[i] & b[i]) | (b[i] & carry) | (a[i] & carry); } s[32] = '\0'; for(i=0; i<32; i++) { a[i] += '0'; b[i] += '0'; s[i] += '0'; } printf("%s\n%s\n%s\n%s\n%s\n", a, b, line, s, end); } return 0; }
http://zerojudge.tw/ShowProblem?problemid=d632
沒有留言:
張貼留言