CSP认证字符画

字符画

吐槽:

这个题的题目描述是真的狗,网上看了许多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)</
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值