作为一个C++都还没开始学的菜鸡 如有纰漏还望大佬们指正
题目在这
A.有趣的数字
确实很有趣 简单粗暴 考察点:质数 枚举 还有是把各位数提取
如果质数的判断不记得了那可没办法
直接上代码叭
#include <iostream>
using namespace std;
int ans=0;
bool check(int m){
while(m){
if(m%10==5)return true;
m=m/10;
}
return false;
}
bool Isprime(int m){
for(int i=2;i*i<=m;i++){
if(m%i==0)return false;
}
return true;
}
int main(){
for(int i=5;i<=99995;i++){
if(Isprime(i)&&check(i)){
ans++;
}
}
cout<<ans<<endl;
return 0;
}
B.爬楼梯
感觉蓝桥杯很喜欢爬楼梯 有各种爬楼梯的变形题
例如来看看
2013蓝桥B组初赛第三题
这个题就是走楼梯问题的一个拓展 加了一个限制条件 但是一加我就傻了 我顺手写一个递归 发现写不出??
大概 我太菜 于是我写了一个递推
步数要是偶数步的话那么怎么来操作 可以用一个变量来算步数 那么就有了step
#include <iostream>
using namespace std;
int ans=0;
void f(int n,int step){
if(n<0)return;
if(n==0&&step%2==0){
ans++;
}
f(n-1,step+1);
f(n-2,step+1);
}
int main (){
f(39,0);
cout<<ans<<endl;
return 0;
}
回到这道题… 这道题又有些不一样 首先数量小了 随手推都可以推出来 随手画画就能出来 有的台阶不能走 可以理解为 例如 第五个台阶包含的步数种类就是0 没有哪种办法可以到达这里 然后可以用递归来做他 当然了也有大佬用dp做的 大佬的地址 dp我完全不会用 老老实实递归 0,1,2,3,4五个特判 5,7为0 简单粗暴
#include<iostream>
using namespace std;
int f(int i){
if(i==0)
return 1;
else if(i==1)
return 1;
else if(i==2)
return 2;
else if(i==3)
return 4;
else if(i==4)
return 8;
else if(i==5||i==7)
return 0;
else return f(i-1)+f(i-2)+f(i-3)+f(i-4);
}
int main ()
{
f(10);
cout<<f(10);
return 0;
}
C.七巧板
这个题迷幻的很 我现在还不知道怎么去用编程去做 我只知道找规律去求解
题目很像奥数题?好吧 这个题目的考察的目的在哪里我也还不清楚
动手分割个画一画就知道 如果要是想做到割出来的区域尽可能多当然是割的这把刀要进过更多的区域咯
像这样来一刀 那可以发现由原来的7个区域变成了13个区域
图画的很丑不要喷我 大概的意思就是这样 那么肉眼可见区域数变成了20个
得到猜想 7+6+7+8+9+10=47 答案就是47了 (想不清楚的话可以不再在这么复杂的图形里面操作可以直接用一个空三角形来找规律)
D.苹果
看不懂 跳过 期待大佬解答 大概是个dp? 不会 答案是62
E.方阵
看不懂 跳过
F.寻找重复项
看着像是一道水题但是作为没学过C++的人 并不能熟练使用库函数
恶补了一下 应该是利用其中的map 但是一般的map又是实现不了的 这一应该要用到C++11标准中的 unordered_map 或者用哈希表来做(我也不会)
#include <iostream>
#include <unordered_map>
using namespace std;
unordered_map<int,bool>mp;
int main(){
int A,B,C;
cin>>A>>B>>C;
int x=1;
mp[x]=1;
for(int i=1;i<=2000000;i++){
x=(1ll*A*x+x%B)%C;
if(mp.count(x)){
cout<<i<<endl;
return 0;
}
mp[x]=1;
}
cout<<-1<<endl;
}
G.字符串
应该是用哈希表 我应该 做不出