ACM、蓝桥杯等程序竞赛中的一些经验-0

来源:互联网 发布:ubuntu 安装打印机 编辑:程序博客网 时间:2024/04/30 06:04

先从简单的一些语法、技巧、竞赛细节开始,后续更新。


1.      %.3f保留3位小数并四舍五入;

 

2.       &&的优先级要高与||
&&有点类似于*,||类似于+
逻辑运算符里!的优先级最高;

 

3.      if(1)

              if(b)

                     x++;

              else  //else默认和最近的一个if配对

                     y++;

 

4.      调用assert.h 里面的assert宏要加头文件声明;

 

5.      要记得ACII表中,A为65,a为97;

 

6.      Double类型的数据输入要用%lf,输出用%f就可以了;

 

7.      EOF符号直接指一个空,不用为’EOF’;

 

8.      注意一个数输出的格式,如%.1lf表示double类型保留一位小数输出,而且这个格式默认是四舍五入的;

 

9.      求a,b两个数的最大公约数,用以下算法

      while( b > 0)

      {

             int t = a % b;

             a = b;

             b = t;

      },得出的a就是最大公约数了。具体理解用长度不一的棒子模拟。

 

10. 类的操作符重构。记得它是一个方法,返回什么类型。返回一个类时,在return时就返回一个类,可现场定义重构。

Rational Rational::operator*(Rational FengShu2)

{

       int a = FengZhi * FengShu2.FengZhi;

       int b = FengMu * FengShu2.FengMu;

       return Rational::Rational(a , b);

}

 

11. 类的私有变量和方法引用和数据结构一样,用.号,如Rational.FengZhi;fengshu4.print();

 

12. usingnamespace std;后刻要加分号;

 

13. 用cin,是不能读取空格的,如果要读取空格,可用getline(cin , str,'G');(这样的话空格回车都能接收。但如果是getline(cin , str);能接收空格,但遇到回车就结束输入了),其中cin表示输入方式,str表示字符串名,’G’表示遇到G结束输入,不包含G,剩下的流估计在输入流缓冲区,这种方法可以用在输入若干个字符,遇到***结束的情况下。

 

14. 字符串可以用类string来用,它只在C++,C不能用。如一个变量string str;那么给str赋值后,str.length()表示长度,str.find(“Geeny”)能找到Geeny的首下标(默认第一个)。还有。a.insert(3, b); //在字符串 a 的第三个字符后插入字符串 b。a.compare("ABCDEFG") <<endl; //字符串 a 与"ABCDEFG" 比较。不同应输出 1,a.empty()<< endl; //字符串 a 不是空的,应输出0。a.swap(b); //字符串 a 和 b 内容交换。

 

15. C++中,~是按位取反,!是逻辑非,^是按位异或,|是按位或,&是按位与,&&是逻辑与,||是逻辑或。

emplate <class T>//模版函数,或者说模版变量。

void ModuelFunction(T *temp)

{

node *p = new node;//记得要用delete清除内存

temp->number =n++;

temp->next = p;

p->number = n;

p->next = NULL;

}//无论temp是什么类型,只要它的内部有value和next变量,套在这个模版里用是合法没问题的。

 

16. assert()函数需要一个参数,它将测试输入参数的真假状态,如果为真,do nothing!如果为假,do something!如:int i= 10;assert( i =20 );它会执行i=20,则不会说什么,之后i就等于20;如果是int i=10;assert( i ==20 );,则会说在哪行出错,并且i还是等于10….

 

17. 在头文件的引用中,如果引用标准库,用<>括起,如 #include <iostream>,如果是自己写的头文件,就用双引号括起,如 #include ”Geeny.h”。这样,可以很快区分,高效。这是细节。

 

 

18. 在函数中。形参有引用和指针的区别。如f(int &a ),在引用的时候,比如f(b),那么形参a就是b的别名,即在f函数中,对a操作就是对b操作,但注意,函数里的a不是指针,而是真实的一个值。而f(int *a),则就是指针了,指针就容易懂,这里不说了。

 

19. 在函数中,直接写一个m文件的名字(不用加.m),如果这个名字是一个窗体和m文件的组合,那么当调用到这个语句时,也会调用这个函数和窗体的。


20. 在窗体的m文件中,写着close;表示关闭窗体,但不表示之后的代码不执行了,它们仍在后台执行。

 

21. 如有数组a[100],使用memset(a,1,sizeof(a));可以将a的所有元素赋值为1。注意:记住memset的用法,还有,memset起初是用来处理字符串的(当然现在也可以用来处理字符串),所以记得用到memset函数在C++中一定要加头文件<cstring>,C则是<string.h>。

 

22. 如果不知道一个数组需要建立多大,那么放肆地开,竞赛中,内存的限制很大,尽管开,别怕。

 

23. 成员函数可以重载,如void print();和void print() const;这两个是一样的,当对象a是一个const对象时,使用a.print();则会自动调用print() const;

 

24. 当使用atan();和sqrt();这类函数时,参数要注明好类型,因为atan();有多个重载函数,参数可以是double,也可以是int等,如用atan(1);则系统不知道1的类型,这是不行的,要用atan(double(1));

 

25. 如果遇到叫你输出很多很多字符的题,那么开辟一个变量可能不允许这么大,则我们可以考虑,是否能边执行程序边用printf直接输出,而不采用先处理好并存为字符串变量再输出,这样可以避免内存太大的问题。

 

26. 如果题目要求输入一个n,之后输入n个数据,切记考虑n的范围,有时系统会使用-1,0来测试程序的全面性,对于n的非法值,可采用return 0直接退出。

 

27. 在蓝桥杯指定的dev编译器中,main函数return1为错误的编译,也就是说,即使你程序算法都写对了,但main函数最后写着return 1,那也是0分。因为这在官方的评测系统是认为错的编译信息。所以记住:main要返回int类型,并且返回的值要写0。

0 0
原创粉丝点击