• ACM自己之前寒假的基础总结


    1、const double pi = acos(-1.0);

    acos:反余弦函数,需要#include<math.h>函数库,acos(-1.0)的意思就是求π的值

    2、算法竞赛中,不要让程序”按任意键退出”(例如,调用system(“pause”))

    3、算法竞赛中不要用头文件#include<conio.h>,包括getch(),clrscr()

    4、尽量用const关键词声明常数

    5、floor(x),floor函数,功能是“向下取整”,即取不大于x的最大整数

    在经过大量计算后,由于误差影响,整数1变成了0.99999,floor的结果会是0而不是1.为了减小误差的影响,一般改成四舍五入,即floor(x+0.5)。

    6、for(int x = 1; ; x++)

    {

    int n=x * x;

    If(n < 1000) continue;

    If(n > 9999) break;

    }

    continue是指跳回for循环的开始

    break是指直接跳出循环。

    7、factorial:阶乘,以后弄阶乘可以设这个

    8、clock函数(#include<time.h>)

    可以使用公式clock()/CLOCKS_PER_SEC来计算一个进程自身的运行时间之后得到的值以“秒”为单位。

    9、在Window下,输入完毕后先按Enter键,再按Ctrl+Z键,最后在按下Enter键,即可结束输入。

    在Linux下,输入完毕后按Ctrl+D键即可结束输入。

    10、使用文件最简单的方法是使用输入输出重定向,只需在main函数的入口处加入以下两条语句:

    freopen(“input.txt”,”r”,stdin);

    freopen(“output.txt”,”w”,stdout);

    上述语句将使得scanf从文件input.txt读入,printf写入文件output.txt

    11、while(scanf(“%d”,&n)==1 && n)

    ==1:表示判断输入的是否为整形数值,如果不是整形,则此条件不成立(例如输入字母a,则返回值为EOF即不为1)

    &&n:表示要求n为非零的数值

    整句话的意思就是,输入非零的整形数值时进入循环

    12、当嵌套的两个代码块中有同名变量时,内层的变量会屏蔽外层变量,有时会引起十分隐蔽的错误。

    13、在算法竞赛中,如果不允许使用重定向方式读写数据,应使用fopen和fscanf/fprintf进行输入输出

    14、memcpy函数要包含头文件string.h

    从数组a中复制k个元素到数组b:memcpy(b,a,sizeof(int)*k)

    如果数组a和b都是浮点型,写成 memcpy(b,a,sizeof(double)*k)

    如果要讲数组a全部复制到数组b中,可以写得简单一些:memcpy(b,a,sizeof(a))

    15、memset(a,9,sizeof(a))的作用是把数组a清零,它也在string.h定义

    16、输出小技巧:为了避免输出多余空格,设置了一个标志变量first,可以表示当前要输出的变量是否为第一个

    if(a[i]){if(first)first = 0;else printf(“ ”);printf(“%d”,i);}

    17、if(a);if(!a);if(a!=0);if(a==0)有什么区别?

    if(a);如果a为真就继续,这里的真包括非0数字和字符,
    if(!a);就是如果a为假就继续,这个和最后一个等价
    if(a!=0);这个就是如果a不等于0
    if(a==0) 如果a等于0

    18、scanf(“%s”,s),它会读入一个不含空格、TAB和回车符的字符串,存入字符数组s,不要在s的前面加上&符号。如果是字符串数组char s[maxn][maxl],可以用scanf(“%s”,s[i])读取第i个字符串,需要注意,scanf(“%s”,s)遇到空白字符会停下来。

    19、strlen():统计字符串长度,不过记得最后有一个’’也会被统计!

    20、getchar()吃掉空格和回车

    21、C语言中的数学函数可以定义成“返回类型 函数名(参数列表){函数体}”,其中函数体的最后一句应该是“return 表达式;”

    double dist( double x1, double y1, double x2, double y2)

    {

    return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));

    }

    22、hypot:math库,计算三角形的斜边长    hypot(a,b);

    23、swap(a,b)  交换a,b    可以自己定义函数

    void swap(int a,int b)
    {
    int temp;
    temp=a;
    a=b;
    b=temp;
    }

    24、return n== 0?1:f(n-1)*n;  当n=0的时候返回1,否则返回返回f(n-1)*n

    25、while(scanf(“%d%d”,&a,&b) == 2) printf(“%d ”,a+b);

    如果a和b都被成功读入,那么scanf的返回值就是2
    如果只有a被成功读入,返回值为1
    如果a和b都未被成功读入,返回值为0
    如果遇到错误或遇到end of file,返回值为EOF

    26、C++中iostream提供了输入输出流,algorithm提供了一些常用的算法

    27、C++中提供了一个新的string类型,用来替代C语言中的字符数组。string类型往往是更好的选择,C++中的cin/count可以直接读写string类型。

    以上是在小白书学习的时候自己学习的一些知识点,在实际做题中,也有一些长进,可看下面这些点

     

    1、使用sort函数的时候,假设数组是a[1000],里面有n个数,sort都是这么用的
    sort(a,a+n),不过这个有个局限性,就是所有排序好的内容都是从小到大,我们可以加一个cmp解决这个问题

     

    在int main()前面构造一个函数,int cmp

     

    Int cmp(int a,int b)

    {

    return a>b;(此处a>b就是由大到小,a<b就是由小到大)

    }

    sort(a,a+n)改成sort(a,a+n,cmp)

    这个在实际做题目的时候比较常用

     

    2、输入输出二维字符数组

     

    由于gets和puts我尚未完全掌握,因此我这里用scanf和printf来写

    char w[100][50];

     

    scanf("%s",w[i]);

    Printf("%s",w[i]);

     

    scanf后面没有&,二维数组后面那个[]不要写出来

     

    3、strlen在字符的题目里面会经常用到用来判断字符的长度

     

    4、极大的数字存入数组,因为有些题目会给出位数很大的数字,我们可以先定义一个(char)字符数组,将其作为字符存入字符数组中,之后再定义一个int 整数数组,将其-’0’存入整数数组中

    假设存入的字符数组是a[ ],整数数组是b[ ],那么我们可以用

    for(int j=0;j<strlen(a);j++)

    a[j]=b[j]-'0';

    将其转换

  • 相关阅读:
    Linux下让一个程序开机自动启动
    Heartbeat高可用解决方案
    NFS文件共享
    清除系统日志的三个脚本
    nfs+rsync+inotify实现文件的实时同步
    安装配置rsync服务端
    shell中如何进行算术运算
    linux下查看账号密码的过期时间和设置时间
    配置Nginx作为web server详解
    [LeetCode] 398. Random Pick Index ☆☆☆
  • 原文地址:https://www.cnblogs.com/pearfl/p/10733186.html
Copyright © 2020-2023  润新知