蓝桥杯常犯的错误以及经验总结(考前冲刺必看)

题目链接 总结
成绩统计
1. double res2 = (double)b * 100 / n; // int类型的数进行计算需要保留小数时,需要强转为double,否则会直接抹去零头,不会四舍五入
2.四舍五入函数round,头文件cmath
卡片
for (int i = 0; i < 10; i ++) cnt[i] = 2021; // 将数组初始化为某一个非0的数的时候,不能用memset,memset是字节填充,适用于初始化为最大值0x3f3f3f3f,或者初始化为0的情况
购物单
直接计算答案的题目,有大量输入计算,虽然可以通过计算机直接加,但是由于数据太多,容易出错,可以寻找一下数据的规律,写成程序,让计算机来算,可以检查数据输入的正确性,准确率会更高,并且这道题目可以根据将同一个折扣的价格先累加再×同一个折扣,这样减少输入,并且可以快速查询是否有漏乘和多乘的情况。
空间
256MB = 256 * 1024 * 1024 * 8 bit,注意 M是1024 * 1024,而不是10^6,不要搞混了
排序 每一趟冒泡排序从左到右,依次扫描,例如:第一趟冒泡排序dcba->cdba->cbda->cbad(第一趟冒泡排序总共交换了3次,依次比较相邻两个数,若逆序,则交换,将序列分成待排序和已有序的两部分,每一趟冒泡排序都能够将待排序部分中最大的那个数移动到有序部分,如果一个长度为n的完全逆序的序列,通过冒泡排序变得有序,需要**(n - 1 + 1) * (n - 1) / 2次交换**;因为第一个数移动到最后一个位置需要n - 1次交换,同理总共需要 n -1 + n - 2 + … + 1次交换。还有一个规律就是,如果一个串完全逆序,例如ihgfedcba,将这个串的第6位 d移动到第一位,串变为dihgfecba,将新的串通过冒泡排序变为有序的交换次数会减少5,并且在所有交换次数减少5的串中,这个新串是字典序最小的那个串。
跑步锻炼
日期题目常用模板:int M[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
int getday(int y, int m) //获取某一年的某一个月有多少天
{
  if (m != 2) return M[m];
  return M[2] + (y % 400 等于 0 或 (y % 4 等于 0 && y % 100));
}
货物摆放
当填空题的 计算数值特别大,比如2021041820210418,像这样的数纯暴力肯定是计算不出来的,这道题目相当于找因子,只需要找出所有的因子组合,然后根据 排列组合的知识就可以得到答案,由于不可能每个数都是因子,所以可以 在电脑上先预处理一下数据先计算出部分答案,从1开始枚举输出它的因子,很快就可以就可以在众多因子种找到那个最接近并小于三次方根的答案,也就是120258,将1~120258中的因子存起来,第一个维度只有可能是这42个因子,再往后的就是重复数据(因为下一个因子的三次方大于2021041820210418),第二个维度从1开始枚举即可, 将答案存在vector中sort排序,然后存在set中进行去重即可得到答案

你可能感兴趣的:(蓝桥杯,算法,c++,技巧,经验总结)