文章目录
准本蓝桥杯时的一些收获
1.c++中string的size()和length():
length是因为沿用C语言习惯而保留下来的,string类最初只有length,引入STL之后,为了兼容又加入了size,它是作为STL容器的属性存在的,便于符合STL的接口规则,以便于STL的算法。
2.中文字符在char[]中的存储方式?
在中文windows操作系统下,中文默认是采用BGK字符集,每个字符占16bit(2字节)。
C语言规定char类型的具体实现至少8bit。一般gcc等编译器都将char类型实现为8bit(1字节)。
在中文Windows下,一般使用C语言的内置char类型的数组,就可以存储中文了。比如char[2]可以存储一个中文。
char ch[11] = “我来测试的”;//5个汉字*2字节/汉字=10字节,再加一个’\0’结尾符,一共需11字节
注:for(int i = 0; i < 11; i ++) cout<<ch[i]; //这条语句的运行结果是:
3.闰年的判断方法
if( (y % 4 == 0) || (y % 100 != 0 && y % 400 == 0))
cout<<y<<"是闰年"<<endl;
else
cout<<y<<"是闰年"<<endl;
4.next_permutation(a+1,a+n+1)
do{
if(check()) ans ++;
}while(next_permutation(a+1,a+n+1));
5.斐波那契数列
斐波那契数列的排列是:1,1,2,3,5,8,13,21,34,55,89,144……
依次类推下去,你会发现,它后一个数等于前面两个数的和。在这个数列中的数字,就被称为斐波那契数。2是第3个斐波那契数。这个级数与大自然植物的关系极为密切。几乎所有花朵的花瓣数都来自这个级数中的一项数字:菠萝表皮方块形鳞苞形成两组旋向相反的螺线,它们的条数必须是这个级数中紧邻的两个数字(如左旋8行,右旋13行);还有向日葵花盘……倘若两组螺线条数完全相同,岂不更加严格对称?可大自然偏不!直到最近的1993年,人们才对这个古老而重要的级数给出真正满意的解释:此级数中任何相邻的两个数,次第相除,其比率都最为接近0.618034……这个值,它的极限就是所谓的黄金分割数
斐波那契数列的个位数:一个60步的循环
11235,83145,94370,77415,61785.38190,
99875,27965,16730,33695,49325,72910…
进一步,斐波那契数列的最后两位数是一个300步的循环,最后三位数是一个1500步的循环,最后四位数是一个15000步的循环,最后五位数是一个150000步的循环。
6.拓展欧几里得算法
void gcd(int a, int b, int& d, int& x, int &y){
if(!b){
d = a; x = 1; y = 0;
}
else{
gcd(b,a%b,d,y,x);
y -= x*(a/b);
}
}
7.完全平方数
- 除 1 外,一个完全平方数分解质因数后,各个质因数的指数都是偶数,如果一个数质分解后, 各个指数都为偶数, 那么它肯定是个平方数。 完全平方数的所有因数的总个数是奇数个。因数个数为奇数的自然数一定是完全平方数。
- 一个正整数n是完全平方数的充分必要条件是n有奇数个因数(包括1和n本身)。
- 两个连续自然数的乘积一定不是平方数,两个连续自然数的平方数之间不再有平方数。
蓝桥杯第四届省赛_09
- 1799-7-16
代码:
#include<bits/stdc++.h>
using namespace std;
int y;
int m;
int d;
int x[14] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int isRun()
{
if(y%4 == 0 || (y%400!=0&&y%100==0)){
return 1;
}
else return 0;
}
void nextDay()
{
d ++;
if(m == 2 && d - 1 == x[m] + isRun() || m != 2 && d - 1 == x[m]){
d = 1;
if(++m == 13){
m = 1;
y ++;
}
}
}
int main()
{
//freopen("data.c", "r", stdin);
y = 1777;
m = 4;
d = 30;
for(int i = 1; i < 8113; i ++) nextDay();
cout<<y<<"-"<<m<<"-"<<d<<endl;
return 0;
}
- 142
2. #include<bits/stdc++.h>
using namespace std;
bool check(int a, int b, int c, int d, int e)
{
if(a == b) return false;
if(a == c) return false;
if(a == d) return false;
if(a == e) return false;
if(b == c) return false;
if(b == d) return false;
if(b == e) return false;
if(c == d) return false;
if(c == e) return false;
if(d == e) return false;
return true;
}
int main()
{
int ans = 0;
for(int a = 1; a <= 9; a ++){
for(int b = 1; b <= 9; b ++){
for(int c = 1; c <= 9; c ++){
for(int d = 1; d <= 9; d ++){
for(int e = 1; e <= 9; e ++){
if(check(a,b,c,d,e) == false) continue;
if( (a*10+b)*(c*100+d*10+e) == (a*100+d*10+b)*(c*10+e)) ans ++;
}
}
}
}
}
cout<<ans<<endl;
return 0;
}
- 51167078
#include<bits/stdc++.h>
using namespace std;
int dp[40][2];
int main()
{
dp[0][0] = 1;
for(int i = 1; i <= 39; i ++){
dp[i][1] = dp[i-1][0] + dp[i-2][0];
dp[i][0] = dp[i-1][1] + dp[i-2][1];
}
cout<<dp[39][0]<<endl;
return 0;
}
斐波那契数列的排列是:1,1,2,3,5,8,13,21,34,55,89,144……
依次类推下去,你会发现,它后一个数等于前面两个数的和。在这个数列中的数字,就被称为斐波那契数。2是第3个斐波那契数。这个级数与大自然植物的关系极为密切。几乎所有花朵的花瓣数都来自这个级数中的一项数字:菠萝表皮方块形鳞苞形成两组旋向相反的螺线,它们的条数必须是这个级数中紧邻的两个数字(如左旋8行,右旋13行);还有向日葵花盘……倘若两组螺线条数完全相同,岂不更加严格对称?可大自然偏不!直到最近的1993年,人们才对这个古老而重要的级数给出真正满意的解释:此级数中任何相邻的两个数,次第相除,其比率都最为接近0.618034……这个值,它的极限就是所谓的黄金分割数
斐波那契数列的个位数:一个60步的循环
11235,83145,94370,77415,61785.38190,
99875,27965,16730,33695,49325,72910…
进一步,斐波那契数列的最后两位数是一个300步的循环,最后三位数是一个1500步的循环,最后四位数是一个15000步的循环,最后五位数是一个150000步的循环。
-
*haystack != *needle
-
p++
-
错误票据
-
题目标题:翻硬币
-
带分数
#include<bits/stdc++.h> using namespace std; int n; int a[10]; int vis[10]; int ans = 0; int num(int i, int j) { int ret = 0; for(int k = i; k <= j; k ++){ ret = ret * 10 + a[k]; } return ret; } void check() { for(int i = 1; i <= 8; i ++){ for(int j = i + 1; j <= 8; j ++){ int aa = num(1,i); int bb = num(i+1,j); int cc = num(j+1,9); if(bb%cc==0){ if(aa + bb/cc == n){ ans ++; } } } } } void dfs(int cur) { if(cur > 9){ check(); return ; } else{ for(int i = 1; i <= 9; i ++){ if(vis[i] == 0){ vis[i] = 1; a[cur] = i; dfs(cur+1); vis[i] = 0; } } } } int main() { while(cin>>n){ ans = 0; dfs(1); cout<<ans<<endl; } return 0; }
10.连号区间数
#include<bits/stdc++.h> using namespace std; int ans,n; int a[50005]; int main() { while(cin>>n){ ans = 0; for(int i = 1; i <= n; i ++) cin>>a[i]; for(int i = 1; i <= n; i ++){ int mini = a[i]; int maxi = a[i]; ans ++; for(int j = i + 1; j <= n; j ++){ if(mini > a[j]) mini = a[j]; if(maxi < a[j]) maxi = a[j]; if(j-i == maxi-mini) ans ++; } } cout<<ans<<endl; } return 0; }