蓝桥杯比赛算法总结

title: 蓝桥杯比赛算法总结
date: 2015-06-18 22:35:24
categories: programming
tags: [算法]


今天突然想把我自己在蓝桥杯比赛时准备的一些算法记录下来,以便翻阅。


蓝桥杯官网

  1. 斐波那契(记忆化搜索)
int memo[MAX_N + 1];  
int fib(int n) {  
    if (n <= 1) return n;  
    if (memo[n] != 0) return memo[n];  
    else return memo[n] = fib(n-1) + fib(n-2);  
}  
  1. 全排列n个元素(非常好用)
//k:当前交换位置与其后元素交换  
public static void f(char[] data, int k){  
    if (k == data.length) {  
        for (int i = 0; i < data.length; i++)  
            system.out.print(data[i] + " ");  
        system.out.println();  
    }  
    for (int i = k; i < data.length; i++) {  
        char t = data[k]; data[k] = data[i]; data[i] = t;//试探  
        f(data, k + 1);  
        char t = data[k]; data[k] = data[i]; data[i] = t;//回溯  
    }  
}  
  1. 辗转相除法求最大公约数
int gcd(int a, int b) {  
    if (b == 0) return a;  
    else return gcd(b, a % b);  
}  
  1. 埃氏筛法(搜索n以内的所有素数)
int prime[MAX_N];//第i个素数  
bool is_prime[MAX_N + 1];  

//返回n以内素数的个数  
int sieve(int n) {  
    int p = 0;
    for (int i = 0; i <= n; i++)  
        is_prime[i] = true;  
    is_prime[0] = is_prime[1] = false;  
    for (int i = 2; i <= n; i++) {  
        if (is_prime[i]){  
            prime[p++] = i;  
            for (int j = 2*i; j <= n; j += i)  
                is_prime[j] = false;  
        }  
    }  
    return p;  
}  
  1. 快速幂运算(反复平方法)
//计算:x^n % mod  
int mod_pow(int x, int n, int mod) {
    int res = 1;  
    while (n > 0) {  
        if (n & 1)  
            res = res * x % mod;  
        x = x * x % mod;  
        n >> = 1;
    }  
    return res;  
}  

我总觉得要把静态博客玩成动态博客才有意思,所以我又无耻的从Dribbble拖了张动图,哈哈o(∩_∩)o。

注:图片来自于Dribbble。

————————原创文章,未经许可,请勿转载!!!————————

你可能感兴趣的:(11篇旧文章)