字符画
吐槽:
这个题的题目描述是真的狗,网上看了许多100分代码的博客讲解才弄懂。
题目大意:
- 前景色是干扰项,实际要用的是背景色
- 题目所说的需要(mn)/(pq)个空格和n/q个换行,是每改变一个颜色打印一个空格,每打印一行打印一个换行,所以有(mn)/(pq)个空格和n/q个换行
- 打印的是ASCII编码的十六进制表示,要用到双转义,即“\x”,比如:“\x31”在终端打印出来时1,“\x31”打印的才是\x31
#include <iostream>
using namespace std;
#include <string>
#include <vector>
#define ENTER "\\x0A"
#define BLANK "\\x20"
#define SEMICOLON "\\x3B"
#define MM "\\x6D"
#define BEFORE "\\x1B\\x5B\\x34\\x38\\x3B\\x32\\x3B"
#define RESET "\\x1B\\x5B\\x30\\x6D"
string base16(char c) {
int num;
string first, second;
num = c; //获得字符的ASCII码
if (num/16 >= 10) {
first = num/16 -10 + 'A';
} else {
first = num/16 + '0';
}
if (num%16 >= 10) {
second = num%16 -10 + 'A';
} else {
second = num%16 + '0';
}
return first + second;
}
string to16Str(int num) {
//字符ASCII码的16进制编码
string s, s1;
int n;
s = to_string(num); //将数字转换为字符串
for (int i=0; i<s.size(); ++i) {
//求出字符串中各个字符的16进制ASCII编码
s1 += "\\x" + base16(s[i]);
}
return s1;
}
void printRGB(vector<int> v) {
string s;
for (int i=0; i<3; ++i) {
if (i != 2)</