蓝桥杯备赛日记【1】(c++赛道)
一、裁纸刀问题(2022、规律、思维、省赛)
解法思路:
参考题目给出的例子发现。不管要裁剪多少次。最外围的四次是固定的。然后通过观察发现,我们的行的裁剪次数为(m-1) 次,而每行都需要裁剪列数即(n-1)次。所以总共需要裁剪的次数就为(m-1)+m*(n-1)+4次。故能将上题解出。
代码描述:
#include <bits/stdc++.h>
using namespace std;
int main()
{// 请在此输入您的代码int m,n;cin>>m>>n;cout<<(m-1)+m*(n-1)+4;return 0;
}
二、数位和【省赛模拟】(2023 模拟 省模拟赛)
解法思路:
将本题拆分成如下几个子问题:
- 判断一个数是不是素数。
- 多少个素数各个数位上的和=23。
所以我们对照问题我们就得首先定义个判断素数的函数,再通过将素数转化成“串”来遍历累加。如果刚好等于23则计数变量++
代码描述
#include<bits/stdc++.h>
using namespace std;
//设置判断素数的函数
bool is_prime(int x)
{if (x < 2){return false;}for (int i = 2; i<=x / i; i++){if (x%i == 0){return false;}}return true;
}int main(){int num=0,count=0,tem=0;for(int i=1;i=<1000000;i++){if(is_prime(i)){tem=i;string S=to_string(tem); //利用to_string()函数将tem转化成S;//利用迭代器p遍历字符串S对其进行累加。for(auto p=S.begin();p!=S.end();p++){num+=*p-48; //因为字符类型的ascll码要大48,所以要将其减去。}if(num==23){count++;}cout<<sum;return 0;
}
三、 最少步数【省模拟赛】(2023 贪心 省模拟赛)
解题思路:
本题是一个简单的贪心算法问题,对本题进行贪心运算就能解出。
代码描述
#include <bits/stdc++.h>
//利用贪心算法将能走的步数排列
using namespace std;
int min(int n){int count=0,sum2=0,tem1=0;sum2=n%3; //算出最多走3级阶梯后剩余的阶梯数tem1=sum2%2; //算出最多走2级阶梯后剩余的阶梯数count=n/3+sum2/2+tem1;//将三次走的步数相加return count;
}
int main()
{// 请在此输入您的代码int n;cin>>n;int count=0;count=min(n);cout<<count;return 0;
}
四、握手问题(省赛 数学 2024)
解题思路:
这道题很简单,只需要举几个例子。第一个人跟剩下49个人握手,第二个人由于已经跟第一个人握手了,所以只跟剩下的47人握手。依次类推到最后七个人。因为没有互相握手,所以次数都是0.所以我们发现,这就是个简单的累加问题
代码描述:
#include <bits/stdc++.h>
using namespace std;
int main(){int sum=0;for(int i=7;i<=49;i++) sum+=i;cout<<sum;return 0;
}
五、 好数(暴力 枚举 省赛 2024)
解题思路:
设置两个函数,通过递归来判断奇偶是否符合条件然后来判断是否符合好数
代码描述:
#include <bits/stdc++.h>
using namespace std;
bool fun_1(int a){ //判断奇数位int x=a;if(x!=0){if(x%2!=0){x/=100;return fun_1(x);}else{return false;}}else {return true;}
}
bool fun_2(int b){ //判断偶数位int y=b;if(y!=0){y/=10;if(y%2==0){y/=10;return fun_2(y);}else{return false;}}else{return true;}
}
int main()
{// 请在此输入您的代码int N,num=0;cin>>N;for(int i=1;i<=N;i++){if(fun_1(i)&&fun_2(i)) num++;}cout<<num;return 0;
}