当前位置: 首页 > 工具软件 > PAT > 使用案例 >

PAT常见错误及原因总结

司马彬
2023-12-01

答案错误

因为解题思路不对而造成的答案错误暂且不说,除了解题思路不对还有可能是以下原因:

  • 数值溢出

这个是最不容易注意到的地方,因为int的范围大概为20亿,以下的情形需要用long long代替:

  1. 要处理的数据大小可能大于20亿。此时,要处理的数据要用long long代替。

  2. 要处理的数据大小不会超过20亿,但这个数据在进行运算的过程中可能超过20亿。这时候,存储中间运算过程结果的数值类型如果为int,也可能会造成数值溢出,存储中间过程结果的这个数值类型要替换成long long。
  • 边界条件

这个特别需要留意!一个程序必须保证能把给定的所有输入转换成正确的输出!当然包括一些边界情况,边界情况通常能在题目中挖掘到,就是输入的极端情况,最常见的是以下两种:

  1. 最小界。一般是数值的最小值,很多题目最小界为0,要视题目而定。
  2. 最大界。一般情况是输入数据的量的最大值,比如,你用int a[10]存储输入的数据,但输入的数据量如果大于10,便会造成答案错误,此时要对存储数据的空间进行扩增。
  • 输出信息错误

输出信息错误是指没有按照题目给定的要求输出信息,区别于格式错误(一般是空格、换行没调整好),这个错误一般源自以下原因:

  1. 敲错了单词。这个错误真的比较低级,但是还是有可能会犯的,一般实在看不出来有什么错误,检查检查输出拼写吧!
  2. 一些情况的输出的漏写。当有多种输出情况时,可能会漏掉一些情况的输出。

运行超时

这个错误是特别多啊!这个问题在我的另一篇博文浅要的总结过:

https://blog.csdn.net/qq_40677317/article/details/104633731


格式错误

格式错误一般是空格、回车的输出不符题目要求。最常见的要求是输出最后不得含有多余空格,这里总结了两个输出技巧解决这个问题:

1.<结果 空格 结果 空格 ... 结果>的情况

#include<cstdio>

int main()
{
	int ans[8]={1,2,3,4,5,6,0,0};
	int count=6;//假设我们已经统计出来结果有6个 
	for(int i=0;i<count;i++)
	{
		printf("%d",ans[i]);
		if(i<count-1)//最后一个之前的都接着输出空格 
			printf("*");//*代替空格,方便观察结果 
	}
	return 0;
}
1*2*3*4*5*6
--------------------------------
Process exited after 0.6741 seconds with return value 0
请按任意键继续. . .

 

2.<其他信息 空格 结果 空格 ... 结果>的情况

#include<cstdio>

int main()
{
	int ans[8]={1,2,3,4,5,6,0,0};
	int count=6;//假设我们已经统计出来结果有6个 
	printf("其他信息");//其他信息
	for(int i=0;i<count;i++)
		printf("*%d",ans[i]);
	return 0;
}
输出:
其他信息*1*2*3*4*5*6
--------------------------------
Process exited after 0.8153 seconds with return value 0
请按任意键继续. . .

 


段错误

到现在我也不知道为什么叫段错误,但根据我做错过的经历,导致段错误的一般原因如下:

  1. 数组越界。访问到了数组最大地址以外的空间便会出现段错误。
  2. 存在野指针。野指针的定义可以参考其他优秀博主更好的分析,野指针会造成对空间的乱指,一旦访问这个野指针的内容,也会造成段错误。一般不要用指针做题,到现在我一次指针也没用过,太容易错了。
  3. 函数调用层次过多。一般是递归层次太多造成的,不是很常见。

内存超限

只遇到过一次,一般是数组开辟的太大,经试验,全局的int数组大概开10W-20W是没有问题的


以上是本人在做的为数不多的100+题当中总结出来的一点基本的经验,希望能以此加深自己对此类问题的分析能力,并对一些PAT道友提供些帮助吧!

 类似资料: