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);
- 去掉注释前要记得再次编译下,检查是否有语法错误,能不能正常生成.out
- 要检查子目录名称是否和每道题题目英文名称一样
- 上传软件FRC检查,千万不能退出

浙公网安备 33010602011771号