题解:洛谷 P1319 压缩技术

【题目来源】

洛谷:P1319 压缩技术 - 洛谷

【题目描述】

设某汉字由 \(N\times N\)\(0\)\(1\) 的点阵图案组成。

我们依照以下规则生成压缩码。连续一组数值:从汉字点阵图案的第一行第一个符号开始计算,按书写顺序从左到右,由上至下。第一个数表示连续有几个 \(0\),第二个数表示接下来连续有几个 \(1\),第三个数再接下来连续有几个 \(0\),第四个数接着连续几个 \(1\),以此类推……

例如: 以下汉字点阵图案:

0001000
0001000
0001111
0001000
0001000
0001000
1111111

对应的压缩码是\(7\ 3\ 1\ 6\ 1\ 6\ 4\ 3\ 1\ 6\ 1\ 6\ 1\ 3\ 7\) (第一个数是 ,其余各位表示交替表示 \(0\)\(1\) 的个数,压缩码保证 \(N\times N=\) 交替的各位数之和)

【输入】

数据输入一行,由空格隔开的若干个整数,表示压缩码。

其中,压缩码的第一个数字就是 \(N\),表示这个点阵应当是 \(N\times N\) 的大小。

接下来的若干个数字,含义如题目描述所述。

【输出】

输出一个 \(N\times N\)\(01\) 矩阵,表示最后的汉字点阵图(点阵符号之间不留空格)。

【输入样例】

7 3 1 6 1 6 4 3 1 6 1 6 1 3 7

【输出样例】

0001000
0001000
0001111
0001000
0001000
0001000
1111111

【算法标签】

《洛谷 P1319 压缩技术》 #模拟# #字符串# #洛谷原创#

【代码详解】

#include <bits/stdc++.h>  // 包含标准库头文件(万能头文件)
using namespace std;      // 使用标准命名空间

int main()
{
    int n;                // 定义变量:每行输出的字符数
    int inCnt = 0;        // 定义变量:输入计数器(记录当前是第几个输入)
    int outCnt = 0;       // 定义变量:输出计数器(记录已输出的字符数)
  
    cin >> n;             // 输入每行输出的字符数
  
    int x;                // 定义变量:临时存储输入的数字
    while (cin >> x)      // 循环读取输入的数字
    {
        inCnt++;          // 输入计数器加1
      
        // 奇数位输入输出0,偶数位输入输出1
        if (inCnt % 2 == 1) 
        {
            // 输出x个0
            for (int i = 1; i <= x; i++) 
            {
                cout << 0;    // 输出0
                outCnt++;      // 输出计数器加1
              
                // 每输出n个字符换行
                if (outCnt % n == 0) 
                    cout << endl;
            }
        }
        else 
        {
            // 输出x个1
            for (int i = 1; i <= x; i++) 
            {
                cout << 1;    // 输出1
                outCnt++;     // 输出计数器加1
              
                // 每输出n个字符换行
                if (outCnt % n == 0) 
                    cout << endl;
            }
        }
    }
  
    return 0;             // 程序正常结束
}

【运行结果】

7 3 1 6 1 6 4 3 1 6 1 6 1 3 7
0001000
0001000
0001111
0001000
0001000
0001000
1111111
posted @ 2026-02-16 15:51  团爸讲算法  阅读(1)  评论(0)    收藏  举报