蓝桥杯省赛考点_[蓝桥杯]真题知识点及分析思路总结

【基础】

c/c++常用头文件:

#include#include#include

using namespacestd;#define N 100001 快速排序函数:

sort:bool compare(int x,inty)

{//>是从大到小,

return x>y;

}

sort(b,b+m,compare);        //默认从小到大

全排列函数:

#include#include

using namespacestd;intmain()

{int ans[4]={1,2,3,4};

sort(ans,ans+4);do{for(int i=0;i<4;i++)

cout<

cout<

}while(next_permutation(ans,ans+4));return 0;

}

【1】把做过的题好好复习、理解。1.      %.3f保留3位小数并四舍五入;2.       &&的优先级要高与||

&&有点类似于*,||类似于+逻辑运算符里!的优先级最高;3.      if(1)if(b)

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

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

Aa Bb Cc Dd Ee Ff Gg Hh Ii Jj Kk Ll Mm Nn Oo Pp Qq Rr Ss Tt Uu Vv Ww Xx Yy Zz6.      Double类型的数据输入要用%lf,输出用%f就可以了;7.      EOF符号直接指一个空8.      注意一个数输出的格式,如%.1lf表示double类型保留一位小数输出,而且这个格式默认是四舍五入的;9.      求a,b两个数的最大公约数,用以下算法while( b > 0)

{int t = a %b;

a=b;

b=t;

},得出的a就是最大公约数了。具体理解用长度不一的棒子模拟。10.if(fabs(m*my-n*ny)<0.000001) //浮点数判断相等,要近似判断,如果用==得不到结果。fabs(float x)浮点数x的绝对值   来源 蓝桥杯 鸡蛋的数目

【2】基本数学知识汇总1.质数(prime number)又称素数,有无限个。质数定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。2.互质数为数学中的一种概念,即两个或多个整数的公因数只有1的非零自然数。公因数只有1的两个非零自然数,叫做互质数。3.模运算

运算规则

模运算与基本四则运算有些相似,但是除法例外。其规则如下:

(a+ b) % p = (a % p + b % p) % p (1)

(a- b) % p = (a % p - b % p) % p (2)

(a* b) % p = (a % p * b % p) % p (3)

ab% p = ((a % p)b) % p (4)

结合率:

((a+b) % p + c) % p = (a + (b+c) % p) % p (5)

((a*b) % p * c)% p = (a * (b*c) % p) % p (6)

交换率: (a+ b) % p = (b+a) % p (7)

(a* b) % p = (b * a) % p (8)

分配率: ((a+b)% p * c) % p = ((a * c) % p + (b * c) % p) % p (9)

同余定理

公式入下:例如:1234%10首先整数都可化成如此形式,如1234化成((1*10+2)*10+3)*10+4进行求余(((1*10+2)*10+3)*10+4)%10此时用到两个公式

(a+b)%c=(a%c+b%c)%c

(a*b)%c=(a%c*b%c)%c

计算过程比较麻烦,多次正反运用公式最终能得到1234%10=(((1%10*10+2)%10*10+3)%10*10+4)%10【高次方数的尾数】

乘法规律发现:乘积的后三位值只与 乘数与被乘数的后三位有关,与乘数和被乘数的高位无关。

【阶乘尾数零的个数】

规律:1-100中   凡是有因子5,尾数就增加一个零;有因子25,尾数就增加两个零。100!有24个零,1000!有249个零。

#include

intmain()

{inti,j,k;int num2=0; //与2相乘的次数

int num5=0; //与5相乘的次数

for(i=1;i<=100;i++) //100!

{

j=i;while((j%2)==0) //对每个数分解,看包含多少个2

{

num2++;

j=j/2;

}

j=i;while((j%5)==0) //对每个数分解,看包含多少个5

{

num5++;

j=j/5;

}

}

printf("%d\n",(num2>num5?num5:num2)); //找出2和5相乘次数少的,就是多少个2x5的对,就有多少个0

return 0;

}

【大衍数列】

中国古代文献中,曾记载过“大衍数列”, 主要用于解释中国传统文化中的太极衍生原理。

它的前几项是:0、2、4、8、12、18、24、32、40、50、60、72、84...intmain()

{inti;for(i=1; i<100; i++){if(i%2==0) //填空

printf("%d \n", i*i/2);elseprintf("%d \n", (i*i-1)/2);

}

printf("\n");

}

数字规律:1,3,6,10,,,,,

公式:i*(i+1)/2【做过有关题的答案】88*88=7744四位数中唯一aabb型数

【补充-常识】

一年的12个月:1-12月31、28/29、31、30、31、30、31、31、30、31、30、31闰年:

(year%4==0&&year%100!=0)||(year%400==0)

【3】API文档的熟悉-常用函数

【4】刷题

【常用算法】

斐波那契(记忆化搜索)int memo[MAX_N + 1];int fib(intn) {if (n <= 1) returnn;if (memo[n] != 0) returnmemo[n];else return memo[n] = fib(n-1) + fib(n-2);

}2.全排列n个元素(非常好用)//k:当前交换位置与其后元素交换

public static void f(char[] data, intk){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;//回溯

}

}3.辗转相除法求最大公约数int gcd(int a, intb) {if (b == 0) returna;else return gcd(b, a %b);

}4.埃氏筛法(搜索n以内的所有素数)int prime[MAX_N];//第i个素数

bool is_prime[MAX_N + 1];//返回n以内素数的个数

int sieve(intn) {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;

}

}returnp;

}5.快速幂运算(反复平方法)//计算:x^n % mod

int mod_pow(int x, int n, intmod) {int res = 1;while (n > 0) {if (n & 1)

res= res * x %mod;

x= x * x %mod;

n>> = 1;

}returnres;

}6.筛选法求素数

memset(vis,0,sizeof(vis));for (int i=2;i<=n;i++){for (int j=i*2;j<=n;j+=i) vis[j]=1;

}//升级版

int m=sqrt(n+0.5);

memset(vis,0,sizeof(vis));for (int i=2;i<=m;i++)if (!vis[i])for (int j=i*i;j<=n;j+=i) vis[j]=1;

素数定理 不超过x的素数个数近似(略超过) x/lnx;7.三种求模:

(a+b)%n=(a%n+b%n)%n;

(a-b)%n=(a%n-b%n+n)%n;

a*b%n=a%n*(b%n)%n;//乘法注意不要越界!!

大数例如10的100次方取模:

将大数例如1234表示为(((1*10+2)*10+3)*10+4),然后利用上述公式求结果;8.快速幂取模,循环实现,原理就是把指数分解为二进制数表示,代码如下:long long quick_mod(long long a,long longb){long long res=1;while(b!=0){if (b%2==1) res*=(a%n);

a=a*(a%n);

b/=2;

}returnres;

}9.但是当数据量大于10^19时,longlong会爆,所以利用快速乘法,原理类似,a*b就是b个a相加,将b表示为二进制:intn;long long mul(long long a,long longb){long long res=0;while(b!=0){if(b%2==1) res=(res+a%n)%n;

a=(a%n+a%n)%n;

b/=2;

}returnres;

}long long quick_mod(long long a,long longb){long long res=1;while(b!=0){if (b%2==1) res=mul(res,a)%n;

a=mul(a,a);

b/=2;

}returnres;

}10.唯一分解定理:

又称为正整数的唯一分解定理,即:每个大于1的自然数均可写为质数的积,而且这些素因子按大小排列之后,写法仅有一种方式。

所以一个数可以表示成一个已知质数数组(刷选法得到)得到的数组e,e里面存各个质数的指数,比如15表示为e{1,1,0,0...}的方式;void fenjie(intn){for(int i=0;i

n/primes[i];

e[i]++;

}if (n==1) break;

}

}

你可能感兴趣的:(蓝桥杯省赛考点)