既然是第一题,那就简单介绍一些题目的大致组成吧,首先题目有题号、题目和分值,题目会大致告诉你所要考查的重点,而分值代表了相应的难度,advanced的有三种分值的题目:20/25/30,一般20涉及比较简单的数值加减/数制转换,25涉及结构体排序,路径,树等,30涉及最短路径、模拟、平衡二叉树等数据结构更复杂的。当然如果是top的话还会有更变态的35分,涉及更高级的数据结构。
题目内容会设计到 1 题目解释; 2 输入格式化说明 3 输出格式化说明 还有时间空间等要求。
因为都是英文的,所以一定要好好理解题目,不要一知半解就开始码到最后不知道错在哪里或没有全对还是得回来返工读题,得不偿失。
题目链接:http://www.patest.cn/contests/pat-a-practise/1001
题目:
时间限制400 ms内存限制65536 kB代码长度限制16000 B判题程序Standard作者CHEN, YueCalculate a + b and output the sum in standard format -- that is, the digits must be separated into groups of three by commas (unless there are less than four digits).
Input
Each input file contains one test case. Each case contains a pair of integers a and b where -1000000 <= a, b <= 1000000. The numbers are separated by a space.
Output
For each test case, you should output the sum of a and b in one line. The sum must be written in the standard format.
Sample Input-1000000 9Sample Output-999,991
注意点:
*虽说只是简单的a+b,但是难点是按格式输出,第一是减号的处理,第二是按三位取逗号的处理。
第一次提交,代码如下:
#include<stdio.h> int main(void){ int a,b; while(scanf("%d %d",&a,&b)!=EOF){ int c = a + b; if(c < 0){ c = -c; printf("-"); }//对减号的处理 if(c >= 1000000){ printf("%3d,%03d,%03d\n",c/1000000,(c/1000)%1000,c%1000);//按格式输出 这一句出了问题 } else if(c >= 1000){ printf("%d,%03d\n",c/1000,c%1000); } else printf("%d\n",c); }//好在a和b都在-1000000到1000000之间,所以可以简单的用两个if来处理。 return 0; }结果如下:
其中,有不少格式错误,那么有可能是减号没有处理好或者其中一个if的结果没有输出正确
检查之后,才发现是上面
printf("%3d,%03d,%03d\n",c/1000000,(c/1000)%1000,c%1000);//第一个%3d不对,应该是%d
有错误,更改为
printf("%d,%03d,%03d\n",c/1000000,(c/1000)%1000,c%1000);
之后,结果如下:
搞定。
P.S:
这里想说的是:有些时候,细节决定一切,还有就是面对题目的时候,能全面的想当然是最好的,但是要知道每道题目也有它各自的特点和限制(比如数的大小或输入方面会有所限制),比如这一题的a,b的范围有限,所以我们可以很轻松的通过if来搞定它,找到了它的限制,也就找到了针对这题的特效药。
另外,pat的OJ也不是一成不变的,可能你以前的代码全AC(accepted)了,但是过一段时间同样的代码也许有几个案例就会不行了,这是很正常的,因为陈越姥姥都在更新和维护,使其判例更加正确和经典,我同学有发现一个案例上的bug(错误/不够全面的代码也能运行通过全部案例),通过微博告知陈越姥姥,结果发现很快就更新了。
所以,为PAT的后台人员点赞,如果你发现了PAT的某些问题,也非常欢迎和他们联系,比如陈越姥姥等。
————Apie陈小旭