2018普及组复赛几点建议

1.带上笔,可以带上不同颜色的笔,打草稿的时候做标记,考试时不能带草稿纸,考试中考场会发,使用完可以再要

2.关于字符串的问题

(1)如果要整串字符串的读入,建议用"scanf("%s",ans);"," printf("%s",ans);,不建议用循环一个一个读入读出 

//错误代码
for(i=0;i<=j;i++) { printf("%c",ans[i]); //有个点末尾多输出/00 }

改成

scanf("%s",ans)
或者
    for(i=0;ans[i];i++)    
    {
        printf("%c",ans[i]);
    }

读入同样道理

(2)fgets和scanf("%s",s);区别

fets会把换行'\n'读入到数组中,长度比实际+1,使用时要慎重

scanf("%s",s);和字符串实际长度一致

(3)字符串处理函数strcmp,strcpy,strlen

strcmp

设这两个字符串为str1,str2,
若str1==str2,则返回零;
若str1<str2,则返回负数;
若str1>str2,则返回正数。
strcpy
char a[],b[]={"COPY"};//定义字符数组a,b
strcpy(a,b);//将b中的COPY复制到a中

strlen

正常使用时定义变量并复制,如:

int len;
len = strlen;

不建议:

//这样做的后果是个别测试点会超时
for(j=0;j<(int)strlen(s);j++) { …… }

总之字符串处理时一定要注意边界,linux环境下要求比较严格

范例:

#include <stdio.h>
#include <string.h>

int main ()
{
   char str1[15];
   char str2[15];
   int ret;


   strcpy(str1, "abcdef");
   strcpy(str2, "ABCDEF");

   ret = strcmp(str1, str2);

   if(ret < 0)
   {
      printf("str1 小于 str2");
   }
   else if(ret > 0) 
   {
      printf("str2 小于 str1");
   }
   else 
   {
      printf("str1 等于 str2");
   }
   
   return(0);
}

 

3.多组数据

边度入变输出时一定要记得加换行

while (scanf ("%d", &n) != EOF) {
        
        flag = false;
        memset(vis, false, sizeof (vis));
        
        for (int i = 1; i <= n; i ++) {
            scanf ("%d", &arr[i]);
        }
        for (int i = 2; i <= n; i ++) {
            vis[abs(arr[i] - arr[i - 1])] = true; //数组要有清晰的范围 
        }
        for (int i = 1; i < n; i ++) {
            if (!vis[i]) {
                flag = true;
            }
        }
        if (flag) {
            puts("Not jolly");//边读入变输出要加换行 
        } else {
            puts("Jolly");
        }
    }

正解:

while (scanf ("%d", &n) != EOF) {
        
        flag = false;
        memset(vis, false, sizeof (vis));
        
        for (int i = 1; i <= n; i ++) {
            scanf ("%d", &arr[i]);
        }
        for (int i = 2; i <= n; i ++) {
            if(abs(arr[i] - arr[i - 1]) < n)
            vis[abs(arr[i] - arr[i - 1])] = true; //数组要有清晰的范围 
        }
        for (int i = 1; i < n; i ++) {
            if (!vis[i]) {
                flag = true;
            }
        }
        if (flag) {
            //puts("Not jolly");//边读入变输出要加换行 
            printf("Not jolly\n");
        } else {
            //puts("Jolly");
            printf("Jolly\n");
        }
    }

4.检查好文件读写(考试结束之前最好在给自己5分钟时间做以下检查)

    freopen("spread.in","r",stdin);
    freopen("spread.out","w",stdout);
  1. 去掉注释前要记得再次编译下,检查是否有语法错误,能不能正常生成.out
  2. 要检查子目录名称是否和每道题题目英文名称一样
  3. 上传软件FRC检查,千万不能退出

 

 

posted @ 2018-11-08 17:29  LizLiz  阅读(329)  评论(0)    收藏  举报