2011-06-01 22:05:02Morris
d681. BinaryCount
http://zerojudge.tw/ShowProblem?problemid=d681
內容 :
對一個二進位的數字每一個位元進行 & 、| 運算
運算規則如下
1 & 1 = 1
1 & 0 = 0
0 & 1 = 0
0 & 0 = 0
1 | 1 = 1
1 | 0 = 1
0 | 1 = 1
0 | 0 = 0
輸入說明
:
輸入為一個二進位字串加上運算子 and 或 or
輸入的二進位字串<32 (5 bit)
且保證每個二進位字串長度一樣(5bit)
在每一行的最後會有一個空白
例如
10001 or 10000 and 11101 and 01001
^ ^ ^ ^ ^ ^ ^
依序是一個運算元+空白+運算子+空白+運算元+...最後是運算元+一個空白
每個運算元的長度都是5bit ,但不一定都是5個運算元+4個運算子
輸出說明
:
輸出轉換後的運算式 與答案
範例輸入 :
10001 or 10000 and 11101 and 01001 10111 or 10111 or 10010 or 00101 01000 and 01001 or 10011 and 11101 10111 and 00011 or 10010 or 11011 01001 and 10110 or 10010 and 11101
範例輸出 :
10001||10000&&11101&&01001 = 00001 10111||10111||10010||00101 = 10111 01000&&01001||10011&&11101 = 11001 10111&&00011||10010||11011 = 11011 01001&&10110||10010&&11101 = 10000
提示
:
使用字串就對了!!
第一次出題,測試一下,如果測資有誤請不要一直測試,請寫信給我謝謝!!
共有三組測資,第一組有5個第二組100個第三組1000個
(2010 0402 13:22更新測資,已重測)
(2010 0406 08:21 加強測資)
出處
:
/**********************************************************************************/
/* Problem: d681 "BinaryCount" from 葆葆 */
/* Language: C */
/* Result: AC (15ms, 272KB) on ZeroJudge */
/* Author: morris1028 at 2011-06-01 20:36:22 */
/**********************************************************************************/
#include<stdio.h>
main() {
char S[6], D[6], c, d;
int Ans[6] = {}, a;
while(scanf("%s", S) == 1) {
printf("%s", S);
for(a = 0; a < 5; a++) Ans[a] = S[a]-'0';
while(scanf("%s %s%c%c", D, S, &c, &d) == 4) {
if(D[0] == 'r' || D[1] == 'r') {
for(a = 0; a < 5; a++)
Ans[a]|=(S[a]-'0');
printf("||%s", S);
}
else {
for(a = 0; a < 5; a++)
Ans[a]&=(S[a]-'0');
printf("&&%s", S);
}
if(d == '\n') break;
}
printf(" = ");
for(a = 0;a < 5; a++)
printf("%d", Ans[a]);
puts("");
for(a = 0; a < 5; a++)
Ans[a] = 0;
}
return 0;
}