如何用C++生成特定页码序列实现A4双面打印4张A6页面?
生成A4双面打印A6的页码序列(C++实现)
先拆解你给出的页码序列规律:每8个页码为一组,对应一轮打印单元。以第一组(1-8页)为例,序列的生成规则可拆解为:
- 前4个是组内的奇数页码,按升序排列:1,3,5,7
- 后4个是组内的偶数页码,但按「第4个偶数、第2个偶数、第8个偶数、第6个偶数」的顺序排列:4,2,8,6
换成通用公式,假设每组的起始页码为start(每组起始为8的倍数+1,比如第1组start=1,第2组start=9,以此类推),每组的8个页码可表示为:
startstart + 2start + 4start + 6start + 3start + 1start + 7start + 5
下面是针对200页文档的C++实现代码,逻辑简单直接,适合快速上手:
#include <iostream> #include <vector> using namespace std; int main() { const int total_pages = 200; const int group_size = 8; // 每组8个页码 vector<int> page_sequence; // 遍历每个组 for (int i = 0; i < total_pages / group_size; ++i) { int start = i * group_size + 1; // 添加组内前4个奇数页码 page_sequence.push_back(start); page_sequence.push_back(start + 2); page_sequence.push_back(start + 4); page_sequence.push_back(start + 6); // 添加组内后4个按规则排列的偶数页码 page_sequence.push_back(start + 3); page_sequence.push_back(start + 1); page_sequence.push_back(start + 7); page_sequence.push_back(start + 5); } // 输出序列(逗号分隔) for (size_t j = 0; j < page_sequence.size(); ++j) { if (j > 0) { cout << ","; } cout << page_sequence[j]; } cout << endl; return 0; }
代码说明
- 用
total_pages固定200,确保刚好分成25个完整组(200/8=25) - 每组通过
start计算起始页码,然后按规则依次添加8个页码到序列中 - 最后遍历序列输出,用逗号分隔,方便直接复制使用
如果后续需要处理非8倍数的总页数,只需要在循环后单独处理剩余的页码(你的需求是200页,刚好整除,所以无需额外处理)。
内容的提问来源于stack exchange,提问作者Miki
相关产品推荐
相关产品推荐

