ZT11 压缩二维码
描述
小欧的二维码转换服务上线了!只需要发送一个字符串,服务器就会把他转换成一个二维码发送给客户端。二维码是一个为 2n∗2n 的方格子,里面每个 1∗11∗1 的格子都有黑或者白两种颜色。然而,没过多久,小欧的服务器就崩溃了。经过检查,小欧发现,服务器会生成一张二维码的图片,发送给客户端,而传输图片的流量大小过大,导致服务器瘫痪。聪明的小欧知道只有黑白格的二维码可以用比特位 0 和 1 来编码,编码后的传输效率远远大于图片。
小欧发明了一种编码方式:用 2n∗2n 长度的二进制串来表示一个边长为 n 的二维码。他会逐行扫描该二维码,并且把扫描到的内容变成 0,10,1 比特流,其中 0 代表白色,1 代表黑色。
现在给你一张二维码图,请你把他转换成比特流。
输入描述:
第一行一个数 n (1≤n≤10) 。
接下来 2n 行,每行 2n 个字符,代表该二维码图形。其中 . 代表白色,# 代表黑色。
输出描述:
2n∗2n/4 个整数,代表转换后的比特流。每个整数为4位比特位所组成的二进制数的值。
示例1
输入:
1 .# #.输出:
6示例2
输入:
2 .##. #..# ##.. ...#输出:
6 9 12 1说明:
逐行扫描后,得到的01比特流为:0110100111000001。
将4个比特位合成为一个整数,得到 6(0110) 9(1001) 12(1100) 1(0001)。
示例3
输入:
3 #.##.#.# #..#.##. ###.#.## ####.##. ##..#... .##.#.#. ######.# ...##.#.输出:
11 5 9 6 14 11 15 6 12 8 6 10 15 13 1 10
一、问题分析
首先读题,仔细看描述中的内容,发现需求是
1.简单来说是,给定一个整数n
2.有2的n次方乘2的n次方个'.'和'#'号,点代表0,井代表1,
2.将这些符号4个一组,组成十进制的整数输出
二、解题思路
1.首先读取n值
2.然后4个一组读取数据
3.将读取到的4个点和井转换成十进制数字输出
三、具体步骤
使用的语言是C
#include <stdio.h>
#include <math.h>
int main() {
int n;
scanf("%d", &n);
if (n == 0) return 0;
int row = pow(2, n);
while (1) {
int num = 0;
char t1 = getchar();
while (t1 == '\n') {
t1 = getchar();
}
if(t1 == EOF) return 0;
if(t1 == '#') num += 8;
char t2 = getchar();
while (t2 == '\n') {
t2 = getchar();
}
if(t2 == '#') num += 4;
char t3 = getchar();
while (t3 == '\n') {
t3 = getchar();
}
if(t3 == '#') num += 2;
char t4 = getchar();
while (t4 == '\n') {
t4 = getchar();
}
if(t4 == '#') num += 1;
printf("%d ",num);
}
return 0;
}