设为首页 加入收藏

TOP

pat乙级自我回顾:一般错误出现原因(一)
2023-07-23 13:36:14 】 浏览:59
Tags:pat

在obsidian里面写的有些引用没用,需要的可以评论区或者私信我呦~
对于错误,末尾的换行不影响格式,

段错误:

一般是设置的数组小于题目给定的要求,循环条件i--写成i++,数组下标写错,也有可能是因为数组a没有初始化,导致 b[a[2]] 这种形式访问了?法内存,是否没有考虑0或者边界值的情况??如对于?个空数组却访问了 arr[0]即,scanf的时候是不是没写&数组越界、还有就是堆栈溢出(?如,递归调?层数太多)

答案错误一般就是代码逻辑有错误,或漏了某个点,从新审题把孩子

运行超时:

  1. 所有测试点都是运?超时,?般情况是出现了死循环
  2. 部分说明题目不能用暴力破解,尝试跳过一些数.
  3. 然后就是当你对一段数据重复访问,你应该问问自己怎么样减少访问次数。
  4. cin 的输?? scanf 更耗时,如果个别测试点超时可以考虑是否可以通过优化输?将 cin 改成 scanf
  5. 使? map 存储如果超时了,?题??没有要求排序,换成? unordered_map 就不会超时,同理,使? set 存储如果超时了,可以考虑换成 unordered_set 避免超时。
  6. 对数据进?排序的过程中,有很多数据是?效数据,如果对所有数据都排序可能会引起超时,所以可以考虑在放?数组之前就做?些条件判断剔除??数据,然后再对数组进?排序。
  7. 一些小习惯:如果写了 main 函数之外的其他函数,传引?会?传值的?式更省时,因为传值是拷?传参,传引?是传?的地址直接在原变量上修改,所以可以考虑优化为 void func(int& a) 的?式传递参数减少耗时。for 循环语句?定义 int i 和在外?定义 int i 其实有少许区别,在 for 循环语句?直接定义的 i ,?如 for(int i = 0; i < 10; i++) 可能会更耗时,把它改成 int i; for (i = 0 ; i < 10; i++) 也是降低代码运?时间的?种可考虑?式哦~
  8. 使?了 v.size()-1 等?式,如果 v.size() 本身就是0,因为 v.size() 返回值是?符号整数 unsigned int , unsigned int 的0减去1得到的是 unsigned int 的最?值?? -1 ,这可能会让int i 循环时 i < v.size() - 1 超时
    https://www.cnblogs.com/ahappyfool/p/17173405.html
    如果某些循环是必要的,那么可以采取跳着访问,跳两个效率就提升一倍。例如1104缘份数:m和n的最大公因数必须大于2,容易得知s1最后结果的个位一定需要是9,如若不是9则n=m+1,那么n与m的最大公因数一定只能是1,因为相邻两个正整数的最大公因数是1,只有s1的末位是9或末尾是连续的9,加一之后末尾变为0才有可能使m与n的最大公因数大于2。[代码#1104 天长地久]
    常考错误点和方法统计:
    一定要注意自己写的每一步,for内部,函数参数,判断条件等都是容易犯错的地方——特别注意已经非常多次了
    注意给的数值范围,如果储存不下换类型,注意不超过等字眼,注意没有给定什么类型的数,然后就是某种类型不满足要求就该使用(int->double)1020 月饼:[[代码#1020 月饼:不能在结构体内使用其他结构体变量初始化另一个变量,可以指定默认值。注意数据类型,这种销售数据不能时int]]
    关注题目信息
    注意临界情况测试,如1103缘份数中,对于m=1时,如果b也等于1,那么就会出错,会得到答案不符的结果,所以测试一下就好了
    题?输?中所给的a b区间可能a和b给的顺序反了,要?较?下a和b的??,如果 a>b 记得swap回来。
    如果是简单题观察能否直接使用某种方式打出,又或者说,能不能一点一点打出
    特殊情况处理(空格处理,特例,哪种情况特殊),处理时因十分注意,以免有有坑,即把不是特殊情况的情况处理成特殊情况1012 数字分类:[[代码#1012 数字分类:要注意当没有该类元素时才用n表示,也就是说该小心当总和为零的选项]]
    大量读入和输出使用scanf和printf 1066 图像过滤
    %操作要注意负数1069微博转发抽奖(和map)
    定义大数组要使用全局变量?不是写在main函数??,否则容易发?段错误(因为?数组
    在 main 函数??的话是存储在栈?,?栈空间是在进程创建时初始化的,有固定的??,?
    般为??KB,所以太?的数组会耗光栈空间。?全局变量占?的堆空间,堆空间中的内存是按
    需分配,?由增?的,可以?常?,?如32位的系统中可以?到4GB。将?数组放在全局变量中
    能避免栈溢出~同时对于做题目可以尝试把重复的元素和固定不变的元素都放在main之外
    如果觉得数组从下标0开始麻烦,可以考虑舍弃0位,从1下标开始存储数据
    int最?值为2147483647,共10位数字; LLONG_MAX 最?值有19位数字,以9开头。所以说储存13位的学号可以? long long int ,输出的时候使? %013lld
    对 char c[15] 进? sort 排序的 cmp(char a[], char b[]) 函数要这样写: strcmp(a, b) < 0 ,因为 strcmp 返回的不是 -1 0 1 ?是 等于0 ?于0 ?于0 的某个值, strcmp 在头?件 #include <string.h> ??对 vector v 或者 string v 进? sort 排序: sort(v.begin(), v.end(), cmp1); ;对数组a进?sort排序: sort(a, a + n, cmp1);
    输出语句如果有 is / are、加s / 不加s的区别的话?定要当?,?如 "There is 1 account" 和 "There are 2 accounts" 是不同的输出语句
    printf输出%的时候用%%
    当索引为int时,使用数组比map好得多,尤其是在时间严格的时候
    时间和日期需要运算比较时可以将其转化为最小单位如秒和天,也可以不转,看哪个方便吧。学?姓名和分数,如果不需要将姓名输出的话,不仅可以? struct 结构体中 string 或者 char 存储姓名,还可以将姓名转化为 int 类型,?如 ABC4 可以转换为 ((((A * 26) + B) * 26) + C) * 10 + 4 = ((((1 * 26) +2) * 26) + 3) * 10 + 4
    大的数的后面几位数等于小的数:1.to_string 2.%操作
    对于多个循环体内多个变量需要累加求和时,应该在最后一重循环进行运算,否则可能会因为当前循环进行多遍而导致某个中间数加了多遍。
    整除和被整除不同,别搞反了
    是否产生相同元素,产生是否想要的结果
    1106题外话:判断数列中不可能出现2018;通过奇偶判断:奇偶会出现规律:0011,0110,1100,1000,0001, 0011,0110
    gcd:辗转相除法求最大公约数
int gcd(int a, int b){	return b == 0 ? a : gcd(b, a % b);}

字符串:stoi,to_string,substr,data,reverse,sort,insert,

  1. 实现数学计算(int):注意开头零。注意含有空格可能(getline和cin.get()循环连续输入多行可能包含空格的字符串,无论在此之前是否有读入,应该在循环开始前加入cin.get();)。还要当心结果为0(即去开头0不能把结果为0去掉)要符合逻辑,保证应有的结果。如
首页 上一页 1 2 3 下一页 尾页 1/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【2023.03.13】无脑秒解已知先/后.. 下一篇Qt 学习笔记 - 第四章 - Qt的三驾..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目