密码解题报告

密码

Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
Total Submission(s) : 18   Accepted Submission(s) : 6
Font: Times New Roman | Verdana | Georgia
Font Size:  

Problem Description

现在,密码在各行各业上的应用已经非常普遍了。
密码是按特定法则编成,用以对通信双方的信息进行明密变换的符号。换而言之,密码是隐蔽了真实内容的符号序列。就是把用公开的、标准的信息编码表示的信息通过一种变换手段,将其变为除通信双方以外其他人所不能读懂的信息编码,这种独特的信息编码就是密码。

现在给你多行字符串和明密的变换方法,请你将密码翻译成明文。每行字符串由'*'和空格组成,每两个'*'之间由一个或多个空格隔开,当空格的个数为奇数时表示1,偶数时表示0。
比如“ *0*00*00*00*0*00*0* ”(这里用'0'来代替空格),这段字符串中每两个'*'之间的空格的个数分别为:1,2,2,2,1,2,1。所以他转换后得到的数字为1000101,这个数是二进制数,将它转化为十进制数为69。按ASCII码表中69对应的字符为'E'。所以我们根据这段字符串可以得到字符'E'。

每一行字符串都对应着一个字符,请将给出的多行字符串转化成字符输出(保证所得的ASCII码值在32~126的范围内)

Input

输入有多组数据,每组先给出一个整数n(n<=30)。然后紧接着n行字符串(字符串长度不超过100)。

Output

输出一行得到的明文。

Sample Input

9
* *  *  *  * *  * *
* *  *  *  *  * * *
* *  *  * *  * *  *
* *  * *  * *  *  *
* *  *   *  * *  * *
*   *  *   * * * * *
* *  *  *  *  *  * *
* *  *  *  *  * * *
*   *  *  * * *  * *
10
* *  *  * *  *  * *
*   *  *  *  *  *  *
* *  *  * * *  *  *
*   *  *  * * * * *
*   *  * *  * * *  *
* *  *  *  * *  * *
*   *  *  *  *  *  *
* *  *  *  *  *  * *
* *  *  *  *  * * *
*   *  *  * * *  * *

Sample Output

ECJTU_ACM
I LOVE ACM
 
 
 
 
#include <cstdio>
#include <cstring>

#define Max 100
char str[Max];
int lav[Max];
int cav[Max];

int main(int argc, char const *argv[])
{
	int n;
	while (~scanf("%d\n", &n)) {
		memset(cav, 0, sizeof(cav));
		int k = 0;
		while (n--) {
			memset(str, '\0', sizeof(str));
			memset(lav, 0, sizeof(lav));
			gets(str);
			int  key = 0;
			int sum = 0;
			int j = 0;
			for (int i = 0; i < strlen(str); i++) {
				if (str[i] == ' ') {
					sum ++;
					key = 1;
				}
				else if (key && str[i] != ' ') 
				{
					
					if (sum % 2 == 0)
						lav[j++] = 0;
					else lav[j++] = 1;
					sum = 0; key = 0;
				}
			}
			for (int i = 0; i < j - 1; i++) {
				lav[i+1] += lav[i] * 2;
			}
			cav[k++] = lav[j-1];
		}
		for (int i = 0; i < k; i++)
			printf("%c", cav[i]);
		printf("\n");
	}

	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值