第十五届蓝桥杯一期模拟赛

127 阅读3分钟

第一题

image.png

思想

维护三个最小变量 a1 a2 a3

把每个输入进来的值与这三个变量进行对比。类似滚动数组。

有这样一个图:

image.png

ifx<=a1小时,那么x就会成为新的a1(即成为新的最小值

但是要从后面开始挪,a2a3位置上成为新a3,a1a2位置上成新a2`。

再把xa1位置上成为新a1.

挪完之后如图(a-1):

image.png

else if x<=a2小比a1大的时候,那么就把x放到a2的位置作为 第二小

else if x<=a3小 比a1,a2大的时候,就把x放到a3的位置上作为 第三小

因为题目要求第三小,所以最后返回a3即可。

code

image.png

#include <iostream>
using namespace std;
int main()
{
  int n=0;
  int a1=1000000000,a2=1000000000,1000000000;
  int x=0;
  cin>>n;

  for(int i=0;i<n;i++)
  {
    cin>>x;

     if(x<=a1)
     {
       a3=a2;
       a2=a1;
       a1=x;
     }

     else if(x<=a2)
     {
         a3=a2;
         a2=x;
     }

     else if(x<=a3)
     {
       a3=x;
     }

     if(i>=2)
     {
       cout<<a3<<" ";
     }
  }
  return 0;
}

第二题

image.png

一次性把数据全部输入,然后套题目给的公式就可以了

套完公式求出尖位置最大程度之后,把最大程度给 一个变量max,接下来维护这个max就行了,max装的就是最大值。

#include <iostream>
using namespace std;

int  n=0;
    int a[1003];
   

int main()
{
       cin>>n;
      
    for(int i=0;i<n;i++)
    {
       cin>>a[i];
    }
   
  int max=0; int t=0;
    for(int i=0;i<n;i++)
    {

      if(a[i-1]>a[i]&&a[i]<a[i+1])
      {
        t= (a[i-1]-a[i])*(a[i+1]-a[i]);
        if(t>max)
        max=t;
      }

    }

    cout<<max<<endl;


  return 0;
}

image.png

第三题

image.png

image.png

image.png

#include <iostream>
using namespace std;
const int N=100000;
int cnt[12];
char s[N];

int main()
{
  cin>>s;
  for(int i=0;s[i];i++)
  {
    cnt[s[i]-'0']++;

  }

  for(int i=0;i<10;++i)
  {
    cout<<cnt[i]<<" ";
  
  }

  return 0;
}

第四题

最小数位和【省模拟赛】 - 蓝桥云课 (lanqiao.cn)

image.png

思想

题目给了  88列个二进制数据,要求  求`最小和`

我们把88列的数据输入,然后用位运算把每一位拆分出来,再相加得到 `相加和`。

再设一个`最小和``最小和`要小于题目给的数据的值。

然后拿`相加和``最小和`  作对比。  如果`相加和`更小,那么`相加和`就变为新的`最小和`

code

#include<iostream>    
  using namespace std;    
  int main()    
  {    
       //根据题目给的数据,我们可以设一个最小和,只要这个最小和比题目给的数据的值都小就行,可以设100000    
      int  nowmin=0,nowminsum=100000,x,t,sum;    
      
       t=x;
      for(int i=0;i<=8;i++)    
      {    
          for(int j=1;j<=8;j++)    
          {  
                  cin>>x;    
              sum+=t%10;    
                  t/=10;    
   
      //如果sum比nomimsum小    
         if(sum<nowminsum)    
         {         
            nowminsum=sum;//,那么sum就是最新的nowminsum    
              
            //把下一个数给nowmin    
            nowmin=x;    
         }    
                
          }
          
      }   
         cout<<nowmin<<endl;
      return 0;
  }

怎么把数据输入

把题目给的这8*8个数据写入一个文件,文件命名为1:

image.png

然后我们把 1输入重定向到 test.c里面,test.c就会把这个数据拿来用,然后就可以求出最小和: image.png

把这个答案填上去就可以了。