蓝桥杯

发布于 2021 年 04 月 17 日 | 更新于 2021 年 08 月 17 日

获取通过scanf("%s", a)读入的字符数组的长度size_t strlen (const char *),头文件string.h


16转2:

char xtob(char a)
{
    char bin;
    a -= 0x30;
    if (a > 0xA) a -= 0x7;
    return a;
}

运行完后 a[2]==3

int a[10] = {0};
int i=1;
a[i] = i++ + i;

scanf读取字符串的长度有上限:4095(ubuntu环境下)

原因:受限于缓冲区大小

参考

这道题(BASIC-12 十六进制转八进制)的问题不在于读取的字符太长,而在于申请的空间(10*10w的数组)太多,导致运行时错误

该题应该是分组输入,每输入一组数据,就输出一个结果。这样就不用初始化10个数组,只需要初始化1个。

64位整数

声明:long long

格式化输入输出:

cin、cout随便用

常用算法

计算机归根结底只会做一件事:穷举。 所有的算法都是在让计算机【如何聪明地穷举】而已,动态规划也是如此。 reference

  1. 回溯

  2. 动态规划(Dynamic Programming)

    补充边界值

    画表:每个格子里是该情况下的最优解

    关键问题:写出状态转移方程(保证每一步都是最优解,通过上一步的最优解求出下一步的最优解)(注意不要算重复了)

    编程技巧:滚动数组(如:Fibonacci数列)

  3. 递归