PAT中的常见坑点

1.注意输出格式,有些整数要求按照要求输出,比如要求输出5-digit的数,不足5位的必须在前面补0,这样输出printf(“%05d”,now)即可。例题:1153 Decode Registration Card of PAT (25 分)。

2.注意scanf用在循环体中的情况,让你输入k行,每行都让你输入:

n a1 a2 a3 a4 ... an

这个时候每一行的n的输入都会被放在循环体中,形成两层for循环的嵌套,a1~an在内循环开始前被输入:

for(i=1;i<=k;i++)
{
    scanf(“%d”,&n);
    for(j=1;j<=n;j++)
    {
        scanf(“%d”,&a[j]);
        ......
        //不可出现break
    }
}

不可出现break!!!如果出现了break则测试点在控制台上输入的后面的a会被当成下一次外循环的n,导致有的测试点无法通过。

3.在做图的问题时,初始化边的长度一定要弄清楚给出的长度的含义,最终形成的图的顶点与顶点之间的距离有可能是给出长度的累加和,有时候还要考虑重边的问题。例题:1034 Head of a Gang (30 分)。

如果两顶点之间的最终距离是所有两顶点之间长度的累加和的话,如下图所示:

"AAA"与"BBB"之间的距离就是10+20=30。

如果存在重边,还要求最短路径,就在存储两顶点之间距离的时候存储所有两顶点之间长度最小的那条边的长度即可。

4.注意输入的数据类型,特别是要分清输入的是char还是string,如果位数有可能大于1位就要用string类型的变量接收。

往常这种用数组下标当指针的二叉树的题目孩子节点为空都用-1表示,而这道题目偏不,偏要用负号'-'表示,负号是个字符,理所应当想到用一个char类型的变量接收,然而N是小于等于20的,即顶点编号的范围是0-19,也就是说,出现负号的位置是可能出现10、18这样的数的,用char来存储就不行了。用scanf读char还要配合着使用getchar(),以后遇到这种情况不如直接用string类型的变量接收。

5.注意输入的字符串中是否包含空格

如果字符串有可能包含空格,请务必使用getline进行输入。

欢迎大家关注/订阅我的微信公众号Code Art Online,我会在我的公众号分享个人见闻,发现生活趣味;这里不仅有0和1,还有是诗和远方↓↓↓

你可能感兴趣的:(PAT中的常见坑点)