完成下面题目 # 压缩技术(续集版) ## 题目描述 设某汉字由 $N \times N$ 的 $\texttt 0$ 和 $\texttt 1$ 的点阵图案组成。 我们依照以下规则生成压缩码。连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从左到右,由上至下。第一个数表示连续有几个 $\texttt 0$,第二个数表示接下来连续有几个 $\texttt 1$,第三个数再接下来连续有几个 $\texttt 0$,第四个数接着连续几个 $\texttt 1$,以此类推…… 例如: 以下汉字点阵图案: ``` 0001000 0001000 0001111 0001000 0001000 0001000 1111111 ``` 对应的压缩码是: $\texttt {7 3 1 6 1 6 4 3 1 6 1 6 1 3 7}$ (第一个数是 $N$ ,其余各位表示交替表示0和1 的个数,压缩码保证 $N \times N=$ 交替的各位数之和) ## 输入格式 汉字点阵图(点阵符号之间不留空格)。 ## 输出格式 输出一行,压缩码。 ## 样例 #1 ### 样例输入 #1 ``` 0001000 0001000 0001111 0001000 0001000 0001000 1111111 ``` ### 样例输出 #1 ``` 7 3 1 6 1 6 4 3 1 6 1 6 1 3 7 ``` ## 提示 数据保证,$3\leq N\leq 200$。
时间: 2024-04-18 07:26:18 浏览: 84
EE Times评选出2012年20大热门技术.pdf
我们可以按照题目描述的规则进行编程,历汉字点阵图的每个符号,统计连续符号的数量,并将统计结果输出为压缩码。
以下是一个示例的 C++ 实现:
```cpp
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<string> grid; // 用于存储点阵图
string line;
while (getline(cin, line)) {
grid.push_back(line);
}
int N = grid.size(); // 汉字点阵图的大小 N x N
vector<int> compressedCode; // 存储压缩码
for (int i = 0; i < N; i++) {
int count0 = 0;
int count1 = 0;
for (int j = 0; j < N; j++) {
if (grid[i][j] == '0') {
count0++;
} else {
count1++;
}
}
compressedCode.push_back(count0);
compressedCode.push_back(count1);
}
// 输出压缩码
cout << N << " ";
for (int i = 0; i < compressedCode.size(); i++) {
cout << compressedCode[i] << " ";
}
cout << endl;
return 0;
}
```
这段代码首先使用 `getline` 函数逐行读取输入,将汉字点阵图存储在 `grid` 中。然后,根据题目描述的规则,遍历每一行的每一个符号,统计连续符号的数量,并将数量依次存储在 `compressedCode` 中。最后,输出压缩码时,先输出汉字点阵图的大小 `N`,再输出压缩码的每个元素。
注意:为了简化输入输出处理,这段代码假设输入的汉字点阵图中每行的符号数量是相等的。
阅读全文