6.特别需要注意的地方:
(1).在G++/GCC下'main'函数必须定义成int型,定义成void main会得到'Compilation Error'。
(2).In function `int main()':
error: name lookup of `i' changed for new ISO `for' scoping
error: using obsolete binding at `i'
这个是你在当前for里定义了i,那么其作用域只限于当前for循环里面,在下一个for里直接调用了i将出现此错误。
7.效率问题:一般情况下,C语言运行时I/O函数比C++的效率高一些,所以处理大数据量的时候,建议使用scanf/printf组合
8.提交题目常见结果:
(1).Accepted (AC) : 您的程序是正确的,恭喜!
(2).Presentation Error (PE) : 虽然您的程序貌似输出了正确的结果,但是这个结果的格式有点问题。请检查程序的输出是否多了或者少了空格(' ')、制表符('\t')或者换行符('\n')。
(3).Wrong Answer (WA) : 输出结果错,这个一般认为是算法有问题。
(4).Runtime Error (RE) : 运行时错误,这个一般是程序在运行期间执行了非法的操作造成的。以下列出常见的错误类型:
ACCESS_VIOLATION 您的程序想从一些非法的地址空间读取或向其中写入内容。一般例如指针、数组下标越界都会造成这个错误的。
ARRAY_BOUNDS_EXCEEDED 您的程序试图访问一个超出硬件支持范围的数组单元。
INTEGER_DIVIDE_BY_ZERO 在进行整数除法的时候出现了除数为零的异常。
STACK_OVERFLOW 栈溢出。一般是由于无限递归或者在函数里使用了太大的数组变量的原因。
(5).Time Limit Exceeded (TLE) : 您的程序运行的时间已经超出了这个题目的时间限制,请改进算法
(6).Memory Limit Exceeded (MLE) : 您的程序运行的内存已经超出了这个题目的内存限制。
(7).Output Limit Exceeded (OLE) : 您的程序输出内容太多,超过了这个题目的输出限制。
(8).Compile Error (CE): 您的程序语法有问题,编译器无法编译。具体的出错信息可以点击链接察看。
(9). System Error (SE) : OJ内部出现错误。由于我们的OJ可能存在一些小问题,所以出现这个信息请原谅,同时请及时与管理员联系。请注意你的程序结尾不要加system("pause"),因为system函数是一个很危险的函数,我们不允许用户在OJ上运行包含此函数的程序,有时候,你的程序出现严重的内存越界也会出现这个问题。
9.特殊说明:个别题目未明确说明数据量的大小,请尽可能大的定义数组,若定义的数组特别大,请定义为全局数组,动态生成的时间效率低于静态生成,因为静态生成的数组在编译的时候已经分配空间,而动态数组是在程序运行的时候动态分配的,需要占用一定的时间。
10.用于将一整个数组置值。大数组时比用for语句快得多
例如 int a[Max]; memset(a,1,sizeof(a)); // 可以实现把这个数组置1的效果。(头文件string.h)
11. 一般来说,如果题目没有特别说明输入结束的标志的话,默认是以EOF(End of File)作为输入结束标志的。这种情况下可以这样写
C: whlie (scanf(“%d”,&a)!=EOF) { …… }
考虑数据的奇偶性
关于__int64的用法收藏 __int64是MS自创的, 要用64位int的话C中本来就自带: #include
备注:__64前面两个下划线
换行读字符可用getchar()将空格跳过
最后输出一定要有回车。
Float b;int a; a=(b+0.5); 这样写的话,就是四舍五入。
acm题一般代码不超过200行,不需要很复杂的算法,这也是很大的局限性看书从算法导论开始,然后就是做题,没有捷径,做100道题,你就脱胎换骨了,注意看看别人的代码多少字节,自己的代码多少字节
考虑数组的下标越界,超过或者小于0。
输出一定要准确:注意大小写。
很多题目都要求在输出数据的恰当位置加空行。一个空行就是一个单独的"\n"。这里,有的题目说:“After each test case, you should output one blank line”,而有的题目说:“Between each test case, you should ouput one blank line”。要注意After和Between的区别,因为如果多了一或少了空行,将导致Presentation Error甚至Wrong Answer。
sprintf(s,"%d%d",a,b)输出到字符串
字符数组保证是以"\0"结尾
函数的返回值最好是int或double
函数遇return直接退出
定义新类型
typedef struct{double x,y;}Point;
Point a,b
测int范围:printf("%u",-1);
c语言常用:
freopen("date.in","r",stdin); //重定向所有标准的输入为文件输入
freopen("date.out","w",stdout);//重定向所有标准的输出为文件输出
fclose(stdout);//输出结束
freopen("date.in","r",stdin); //重定向所有标准的输入为文件输入
freopen("date.out","w",stdout);//重定向所有标准的输出为文件输出
fclose(stdout);//输出结束
gets(s);以回车作为字符的分解符,不管s的可用空间有多大!
scanf一个特别好用的地方,就是可以滤去一些不想要的东西。举例说明如下:比如输入为日期 yyyy-mm-dd,就可以这样写:int year,moth,day;scanf(“%d-%d-%d”,&year,&moth,&day);
sscanf():sscanf()经常用来分解字符串,功能非常强大,但很多功能都需要正则表达式的知识,所以就介绍一下最简单的几种用法,大家如果想了解更多的话,自己去网上找吧。1、char str[100],str1[100],str2[100];gets(str);sscanf(str,”%s%s”,str1,str2);将读入的一整行字符串按空格,制表符或回车符分割成两个字符串。2、取指定长度的字符串。如在下例中,取最大长度为4字节的字符串。 sscanf("123456 ", "%4s", str);
getch()、getche()和getchar()函数 (1) getch()和getche()函数 这两个函数都是从键盘上读入一个字符。其调用格式为: getch(); getche(); 两者的区别是: getch()函数不将读入的字符回显在显示屏幕上, 而getche() 函数却将读入的字符回显到显示屏幕上。 例7: #include
本文来源:https://www.2haoxitong.net/k/doc/a61c7881ec3a87c24028c410.html
文档为doc格式