刷题笔记
小U的数字插入问题:
对于数字插入某一位置进行大小比较,对于c语言,可以先用sscanf将整形数字转化为字符串
先初始化最大值为将数字插入到最前面的情况
之后进行for循环,将数字插入到对应字符串的每个位置,每次循环进行与之前设置好的最大值进行比较并更新最大值
之后返回最大值
思路:将数字转化为字符型在每个位置插入进行比较
心得:如何拼接的思路最开始没有想到,可以用strncpy对复制字符数量进行限制,实现中间插入的算法
知识总结:上图所示的temp[i] = ‘\0’原理是为了确保temp在拼接之前是一个有效的C字符串,C字符串必须以空字符\0结尾,这样标准库函数(如strcat)才能正确处理它。如果不加temp[i] = '\0',strcat将无法判断temp的结束位置,可能会导致未定义行为。
超市里的货物架调整:
算法思路:统计某一字符(如特定字母)出现次数,可以用下标索引将对应位置的数量加一,如图,定位相应位置可以采用s[i] – ‘a’的方式
计算出仓库里每个字母的数量后,对用户对各个字母的需求进行计算
还是用相同的方法找到顾客需求字母对应的索引,不过又再次定义了一个新的整型变量customer_demand,用来存放相同字母在用户所有需求中的出现次数,之后对比库存中该字母的出现的次数和用户需求量,选择更小的值作为售出量,最后清空该字母的库存
计算x到y的最小步数:
我认为这是一道主要用数学思维来解决的算法题
思路:如图所示,该题其实只要对步数和的区间进行锁定即可
比如 1 2 1 、1 2 2 1 、1 2 3 2 1 、1 2 3 3 2 1 ….
只要锁定步数所在区间并在不断增加的循环中相应的增加步数,在循环结束时,就能输出那时相应的步数
首先对于0 1 2 3特殊情况特殊处理,之后对于d > 3的情况
当t(t为步数)为奇数时,说明中间要再重复一次,所以需要再加一次跨越步数大小,并对t加一,当t为偶数时,说明中间两项相同,边要更新步长
对于为何是小于d-2,这是将首末的两个1减去,相应的,在返回值处要对t加数,但是在每次的循环判断时t多加了一个步数,其中一步分给d-2,消去两步中的一步,而首末两项占两步,还需要一步,则return t + 1