zoukankan      html  css  js  c++  java
  • 算法竞赛入门经典_4.1_判定素数_组合数

      又是两天没写博客了.

    今天我直接把第三章的练习跳过了,先把后面的基础看完.

    这节内容是自定义函数和结构体,下面是简单的函数和结构体定义

    typedef struct {double x, y;}Point;
    
    double dist(Point a, Point b)
    {
      return hypot(a.x - b.x, a.y - b.y);  
    }

    其中,hypot的函数意思是平方和开根号.

    1.组合数

    注:  在算法竞赛中,除了有特殊规定之外,请总是让main函数返回0;

       即使最终答案在所选则的数据类型的范围之内,计算的中间变量仍然可能溢出;

       看代码

    //组合数 2017-8-20
    
    #include <stdio.h>
    
    long long C(int n, int m) {
        if (m < n - m) m = n - m;
        long long ans = 1;
        for (int i = m + 1; i <= n; i++) ans *= i;
        for (int i = 1; i <= n - m; i++) ans /= i;
        return ans;
    }
    int main()
    {
        int n, m;
        int ans;
        scanf("%d%d", &n, &m);
        ans = C(n, m);
        printf("%d
    ", ans);
        return 0;
    }

    这个程序就本来是存在溢出的,现在通过约分处理,就完全避免了中间变量引起的溢出了


    运行结果

    2.素数的判定

    说到这里,博主记得刚进大学时连素数是什么都不明白,在这里特把素数的定义罗列一下,复习小学知识

    素数定义:被1和它本身整除的,大于1的整数称为素数.

    代码:

    //素数判定 2017-8-20
    
    #include <stdio.h>
    #include <math.h>
    int is_prime(int n) {
        if (n <= 1) return 0;
        int m = floor(sqrt(n) + 0.5);
        for (int i = 2; i <= m; i++)
            if (n % i == 0)
                return  0;
        return 1;
        
    }
    int main()
    {
        int n;
        int ans;
        scanf("%d", &n);
        ans = is_prime(n);
        printf("%d
    ", ans);
        return 0;
    }
    • 注:   判断一个事物是否具有某一性质叫做谓词(predicate),比如判断人是否具有懒惰性,is_lazy,对于命名可以用,is_xxx表示
    • 编写函数的时候,应尽量保证该函数能对任何合法参数得到正确的结果,就像上面的代码,如果不判段这个数是否小于等于1,就得不到正确的结果了,,此时,应在显著位置标明函数的缺陷,以必免被错误调用.
    • 特别的,在上面的代码中,通过取得开根号数直接判断,+0.5的目的是避免浮点误差.

     运行结果:

  • 相关阅读:
    如何在iTerm2中配置oh my zsh?
    sublime中格式化jsx文件
    ES6 new syntax of Literal
    ES6 new syntax of Rest and Spread Operators
    How to preview html file in our browser at sublime text?
    ES6 new syntax of Default Function Parameters
    ES6 new syntax of Arrow Function
    七牛云2018春招笔试题
    Spring-使用注解开发(十二)
    Spring-声明式事物(十一)
  • 原文地址:https://www.cnblogs.com/ncgds/p/7402148.html
Copyright © 2011-2022 走看看