蓝桥杯备赛日记【day1】(c++赛道)

一、裁纸刀问题(2022、规律、思维、省赛)


蓝桥杯备赛日记【day1】(c++赛道)_第1张图片

解法思路:

        参考题目给出的例子发现。不管要裁剪多少次。最外围的四次是固定的。然后通过观察发现,我们的行的裁剪次数为(m-1) 次,而每行都需要裁剪列数即(n-1)次。所以总共需要裁剪的次数就为(m-1)+m*(n-1)+4次。故能将上题解出。

代码描述:

#include 
using namespace std;
int main()
{
  // 请在此输入您的代码
  int m,n;
  cin>>m>>n;
  cout<<(m-1)+m*(n-1)+4;
  return 0;
}

二、数位和【省赛模拟】(2023 模拟 省模拟赛)


蓝桥杯备赛日记【day1】(c++赛道)_第2张图片

解法思路:

        将本题拆分成如下几个子问题:

  • 判断一个数是不是素数。
  • 多少个素数各个数位上的和=23。 

        所以我们对照问题我们就得首先定义个判断素数的函数,再通过将素数转化成“串”来遍历累加。如果刚好等于23则计数变量++

代码描述

#include
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<

三、 最少步数【省模拟赛】(2023 贪心 省模拟赛)


蓝桥杯备赛日记【day1】(c++赛道)_第3张图片

解题思路:

        本题是一个简单的贪心算法问题,对本题进行贪心运算就能解出。

代码描述

#include 
//利用贪心算法将能走的步数排列
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<

 四、握手问题(省赛 数学 2024)


蓝桥杯备赛日记【day1】(c++赛道)_第4张图片

解题思路:

        这道题很简单,只需要举几个例子。第一个人跟剩下49个人握手,第二个人由于已经跟第一个人握手了,所以只跟剩下的47人握手。依次类推到最后七个人。因为没有互相握手,所以次数都是0.所以我们发现,这就是个简单的累加问题

代码描述:

#include 
using namespace std;
int main(){
    int sum=0;
    for(int i=7;i<=49;i++) sum+=i;
    cout<

五、 好数(暴力 枚举 省赛 2024)


蓝桥杯备赛日记【day1】(c++赛道)_第5张图片

解题思路:

        设置两个函数,通过递归来判断奇偶是否符合条件然后来判断是否符合好数

代码描述:

#include 
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<

你可能感兴趣的:(蓝桥杯,c++,职场和发展)