UVA 10878 - Decode the tape

Your boss has just unearthed a roll of old computer tapes. The tapes have holes in them and might contain some sort of useful information. It falls to you to figure out what is written on them.

Input
The input will contain one tape.

Output
Output the message that is written on the tape.

Sample Input Sample Output
___________
| o   .  o|
|  o  .   |
| ooo .  o|
| ooo .o o|
| oo o.  o|
| oo  . oo|
| oo o. oo|
|  o  .   |
| oo  . o |
| ooo . o |
| oo o.ooo|
| ooo .ooo|
| oo o.oo |
|  o  .   |
| oo  .oo |
| oo o.ooo|
| oooo.   |
|  o  .   |
| oo o. o |
| ooo .o o|
| oo o.o o|
| ooo .   |
| ooo . oo|
|  o  .   |
| oo o.ooo|
| ooo .oo |
| oo  .o o|
| ooo . o |
|  o  .   |
| ooo .o  |
| oo o.   |
| oo  .o o|
|  o  .   |
| oo o.o  |
| oo  .  o|
| oooo. o |
| oooo.  o|
|  o  .   |
| oo  .o  |
| oo o.ooo|
| oo  .ooo|
|  o o.oo |
|    o. o |
___________
A quick brown fox jumps over the lazy dog.


Problemsetter: Igor Naverniouk

Special thanks: BSD games ppt.

【解析】:

輸入從上往下看,可以看成題目所說的一段磁帶。
題目給的信息很少,因此大部分信息要從輸入輸出得到。
(相當於給你一段明文跟密碼,然後你破解其中的加密規則)


首先我們發現,磁帶一共有43行,跟密碼的字符個數一樣(換行包括在內)。
可以猜測是否磁帶的一行,代表一個字符。
然後我們可以發現,密碼中相同的字符,在磁帶裏面的對應行,也是相同的。
更加堅定我們的猜測。


然後我們觀察磁帶裏每行的結構。
其整體的格式一樣,只有 “o” 的位置和數量有不同。
而且 “o” 只會在固定的7個位置出現。
則 7 個位置,一共可以表示出 2^7=128 種字符。
聯繫字符的整型特徵(ASCII碼),
可以猜測,磁帶的每行表示着一個二進制數,這個二進制數的數值正好是對應字符的ASCII碼。


看一下空格(ASCII碼爲32)的對應行 “ o  .   ”,
把行中的空格看作0,“o” 看作1,則可以得到二進制數0100000,正好是32。
破譯完畢。

【代碼】:

/*********************************
*   日期:2013-5-3
*   作者:SJF0115
*   題號: 10878 - Decode the tape
*   來源:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=20&page=show_problem&problem=1819
*   結果:AC
*   來源:UVA
*   總結:
**********************************/
#include <stdio.h>
#include <string.h>

int c[] = { 0, 0, 64, 32, 16, 8, 0, 4, 2, 1, 0};

int main() {
	char str[15];
	int value,i;
	//freopen("C:\\Users\\XIAOSI\\Desktop\\acm.txt","r",stdin);   
	gets(str);
	while(gets(str) && str[0] != '_'){
		value = 0;
		int len = strlen(str);
		for(i = 2;i < len;i++){
			if(str[i] == 'o'){
				value += c[i];
			}
		}
		printf("%c",value);
	}
}


發佈了493 篇原創文章 · 獲贊 115 · 訪問量 314萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章