蓝桥杯 题库 简单 每日十题 day8

蓝桥杯 题库 简单 每日十题 day8_第1张图片

01 扫雷

题目描述
在一个n行列的方格图上有一些位置有地雷,另外一些位置为空。
请为每个空位置标一个整数,表示周围八个相邻的方格中有多少个地雷。
输入描述
输入的第一行包含两个整数n,m。
第2行到第n+1行每行包含m个整数,相邻整数之间用一个空格分隔。如果对应的整数为0,表示这一格没有地雷。如果对应的整数为1,表示这一格有地雷。
其中,1≤n,m≤100分钟后还是在当天。
输出描述
输出n行,每行m个整数,相邻整数之间用空格分隔。
对于没有地雷的方格,输出这格周围的地雷数量。对于有地雷的方格,输出9。
输入输出样例
示例1
输入

3 4
0 1 0 0
1 0 1 0
0 0 1 0

输出

2 9 2 1
9 4 9 2
1 3 9 2
#include 
using namespace std;
int main()
{
  int n,m;
  cin>>n>>m;
  int a[n][m];
  int c[n][m];
  for(int i=0;i<n;i++)
  {
      for(int j=0;j<m;j++)
      {
          c[i][j]=0;
          cin>>a[i][j];
      }
  }
   for(int i=0;i<n;i++)
  {
      for(int j=0;j<m;j++)
      {
      if(a[i][j]==1)
          {
              c[i][j]=9;
              for(int b=i-1;b<=i+1;b++)
              {
                  for(int d=j-1;d<=j+1;d++)
                  {
                      if(a[b][d]==0&&b>=0&&d>=0)
                      {
                          c[b][d]++;
                      }
                  }
              }
          }
    }
}    
    for(int i=0;i<n;i++)
  {
      for(int j=0;j<m;j++)
      {
          cout<<c[i][j]<<" ";
      }
      cout<<"\n";
  }
  return 0;
}

02 单词分析

题目描述
小蓝正在学习一门神奇的语言,这门语言中的单词都是由小写英文字母组成,有些单词很长,远远超过正常英文单词的长度。小蓝学了很长时间也记不住一些单词,他准备不再完全记忆这些单词,而是根据单词中哪个字母出现得最多来分辨单词。现在,请你帮助小蓝,给了一个单词后,帮助他找到出现最多的字母和这个字母出现的次数。
输入描述
输入一行包含一个单词,单词只由小写英文字母组成。
对于所有的评测用例,输入的单词长度不超过1000。
输出描述
输出两行,第一行包含一个英文字母,表示单词中出现得最多的字母是哪个。如果有多个字母出现的次数相等,输出字典序最小的那个。
第二行包含一个整数,表示出现得最多的那个字母在单词中出现的次数。
输入输出样例
示例1
输入

Lanqiao

输出

a
2

示例2
输入

longlonglongistoolong

输出

o
6
解题思路
简单模拟题。
开一个数组存储每个字母出现的次数,然后根据题意简单判断一下即可。
或者先求出最大出现次数,再求出出现频率=最大出现次数的最小字符。
#include
using namespace std;
int ch , ma , cnt[30];
signed main()
{
    string s;
    cin >> s;
    for(auto i : s) cnt[i - 'a'] ++ ;
    for(int j = 0 ; j < 26 ; j ++) if(ma < cnt[j]) ma = cnt[j] , ch = j;
    cout << (char)(ch + 'a') << '\n';
    cout << ma << '\n';
    return 0;
}

法二

#include 
#include 
//先遍历所有字母,记录字母的格式,然后进行最大值判断。
int main()
{
  char a[1000];
  int b[26]={0};
  int lenth;
  scanf("%s",a);
  lenth=strlen(a);
  int i=0;
  int max = 0;
  int j=0;
  int max_index =0; 
  for (i=0;i<lenth;i++){
    switch(a[i]){
      case 'a': b[0] += 1;   break;
      case 'b': b[1] += 1;   break;
      case 'c': b[2] += 1;   break;
      case 'd': b[3] += 1;   break;
      case 'e': b[4] += 1;   break;
      case 'f': b[5] += 1;   break;
      case 'g': b[6] += 1;   break;
      case 'h': b[7] += 1;   break;
      case 'i': b[8] += 1;   break;
      case 'j': b[9] += 1;   break;
      case 'k': b[10] += 1;   break;
      case 'l': b[11] += 1;   break;
      case 'm': b[12] += 1;   break;
      case 'n': b[13] += 1;   break;
      case 'o': b[14] += 1;   break;
      case 'p': b[15] += 1;   break;
      case 'q': b[16] += 1;   break;
      case 'r': b[17] += 1;   break;
      case 's': b[18] += 1;   break;
      case 't': b[19] += 1;   break;
      case 'u': b[20] += 1;   break;
      case 'v': b[21] += 1;   break;
      case 'w': b[22] += 1;   break;
      case 'x': b[23] += 1;   break;
      case 'y': b[24] += 1;   break;
      case 'z': b[25] += 1;   break;
    }
  }
  for (j=0;j<26;j++){
    if(b[j] > max)
    {
       max = b[j];
       max_index = j;
    }
    else if (b[j] == max ){
      if(j<max_index){
        max_index = j;
        max = b[j];
      } 
      else {
        max = max;
        max_index = max_index;
      }
    }
  } 
  //for(i=0;i<26;i++){
  //  printf("%d\n",b[i]);
  //}
  //printf("%s\n%d%d",a,max,max_index);
  printf("%c\n%d\n",'a'+max_index,max);
  return 0;
}

03 超级质数

问题描述
如果一个质数P的每位数字都是质数,而且每两个相邻的数字组成的两位数是质数,而且每三位相邻的数字组成的三位数是质数,依次类推,如果每相邻的K:位数字组成的k:位数都是质数,则P称为超级质数。如果把超级质数P看成一个字符串,则这个超级质数的每个子串都是质数。
例如,53是一个超级质数。
请问,最大的超级质数是多少?
解析
这题其实是质数排列组合问题,由一位数扩展到更多位一位数是质数的:2,3,5,7扩展到两位数,两两组合剩下23,37,53,73然后再扩展到三位数,就已经得出结论了,373

#include 
using namespace std;
int main()
{

1.10以内的质数有2357
2.根据超级质数的组成规则可以组成2337535773这样的相邻质数组合,
满足要求的有23375373 
3.根据这些组合可以组成237373573737这样的数字组合,满足要求的只有373
4.根据组成规则已经不能在373的基础之上进行组合,即为最大超级质数 
 
int PANDUAN(int n) {
    int i;
    for(i=2;i<n/2;i++) {
        if(n%i==0) break;
    }
    if(i==n/2) return 1;
    else return 0;
} 
int main() {
    int n;
    while(1) {
        scanf("%d",&n);
        if(n==0) break;
        int temp=PANDUAN(n);
        printf("temp = %d \n",temp);
    }
    return 0;
}
  cout<<373;
  return 0;
}

04 合法日期

合法日期
题目描述
小蓝正在上小学,老师要求同学们在暑假每天记日记。可是小蓝整个暑假都在玩,直到最后一天才想起要记日记。于是小蓝赶紧编了一些日记交给老师。没想到,日记很快就被老师发现了问题,原来小蓝记完8月31日的日记,竟又记了8月32日和8月33日的日记。这显然是有问题的,因为根本没有8月32日和8月33日。
给定一个月份和一个日期,请问2021年有没有这一天。
输入描述
输入的第一行包含一个整数m,表示月份。
第二行包含一个整数d,表示日期。
其中,1≤m≤20,1≤d≤40。
输出描述
如果2021年有m月d日,输入yes,否则输出no。

#include 
using namespace std;
int main()
{
  int month[31]={0,31,28,31,30,31,30,31,31,30,31,30,31};
  int m,d;
  cin>>m>>d;
  if(month[m]<d)
  cout<<"no";
  else cout<<"yes";
  return 0;
}

05 纯质数

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。如果一个正整数只有1和它本身两个约数,则称为一个质数(又称素数)。前几个质数是:2,3,5,7,11,13,17,19,23,29,31,37,…。如果一个质数的所有十进制数位都是质数,我们称它为纯质数。例如:2,3,5,7,23,37都是纯质数,而11,13,17,19,29,31不是纯质数。当然1,4,35也不是纯质数。请问,在1到20210605中,有多少个纯质数?

#include 
#include 
int prime(int n)
{
  int i;
  for(i=2;i<=sqrt(n);i++)
  {
    if(n%i==0)return 0;
  }
  return 1;
}
int chunprime(int n)
{
  int m=n;
  while(m)
  {
    if(m%10==2||m%10==3||m%10==5||m%10==7)
    {
      m=m/10;
    }
    else return 0;
    }
  return 1;
}
int main(int argc, char *argv[])
{
  int i,ans=0;
  for(i=2;i<=20210605;i++)
  {
    if(chunprime(i)&&prime(i))ans++;
  }
  printf("%d",ans);
  // 请在此输入您的代码
  return 0;
}

06 方格分割

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
6x6的方格,沿着格子的边线剪开成两部分。要求这两部分的形状完全相同。
如下就是三种可行的分割法。
蓝桥杯 题库 简单 每日十题 day8_第2张图片
蓝桥杯 题库 简单 每日十题 day8_第3张图片
蓝桥杯 题库 简单 每日十题 day8_第4张图片
试计算:包括这3种分法在内,一共有多少种不同的分割方法。注意:旋转对称的属于同一种分割法。

#include
using namespace std;
int dx[4]={1,0,-1,0},dy[4]={0,1,0,-1};
int ans=0;
int map[7][7]={0};//初始化
void DFS(int x,int y)
{
    if(x==0||x==6||y==0||y==6)
    {
        ans++;
        return;
    }        
    for(int i=0;i<4;i++)//四个方向
    {
        int newx=x+dx[i];
        int newy=y+dy[i];
        if(map[newx][newy]==0)
        {
            map[newx][newy]=1;
            map[6-newx][6-newy]=1;
            DFS(newx,newy);
            map[newx][newy]=0;
            map[6-newx][6-newy]=0;
        }    
    }
}
int main()
{
    map[3][3]=1;//从中心开始,3,3表示中心的点
    DFS(3,3);
    cout<<ans/4<<endl;//注意结果除以4
    return 0;
}

07 旋转

题目描述
图片旋转是对图片最简单的处理方式之一,在本题中,你需要对图片顺时针旋转90度。
我们用一个nxm的二维数组来表示一个图片,例如下面给出一个3×4的图片的例子:

1 3 5 7
9 8 7 6
3 5 9 7

这个图片顺时针旋转90度后的图片如下:

3 9 1
5 8 3
9 7 5
7 6 7

给定初始图片,请计算旋转后的图片。
输入描述
输入的第一行包含两个整数n,m,分别表示行数和列数。接下来n行,每行m个整数,表示给定的图片。图片中的每个元素(像素)为一个值为0至255之间的整数(包含0和255)。
输出描述
输出m行n列,表示旋转后的图片。
输入输出样例
示例
输入

3 4
1 3 5 7
9 8 7 6
3 5 9 7

输出

3 9 1
5 8 3
9 7 5
7 6 7
#include

int main()
{
    int num[255][255];
    int n, m;
    scanf("%d %d", &n, &m);
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            scanf("%d",&num[i][j]);
        }
    }
    for (int i = 0; i < m ; i++)
    {
        for (int j = n-1; j >=0; j--)
        {
            printf("%d ", num[j][i]);
        }
        printf("\n");
    }
    return 0;
}

08 本质上升序列

题目描述
本题为填空题,只需要算出结果后,在代码中使用输出语句将所填结果输出即可。
小蓝特别喜欢单调递增的事物。在一个字符串中,如果取出若干个字符,将这些字符按照在字符串中的顺序排列后是单调递增的,则成为这个字符串中的一个单调递增子序列。
例如,在字符串lanqiao中,如果取出字符n和q,则nq组成一个单调递增子序列。类似的单调递增子序列还有lng、i、ano等等。小蓝发现,有些子序列虽然位置不同,但是字符序列是一样的,例如取第二个字符和最后一个字符可以取到ao,取最后两个字符也可以取到ao。小蓝认为他们并没有本质不同。
对于一个字符串,小蓝想知道,本质不同的递增子序列有多少个?例
如,对于字符串lanqiao,本质不同的递增子序列有21个。它们分别
是l、a、n、q、i、o、ln、an、lq、aq、nq、ai、lo、ao、no、io、
Inq、anq、Ino、ano、aio。
请问对于以下字符串(共200个小写英文字母,分四行显示):

tocyjkdzcieoiodfpbgcncsrjbhmugdnojjddhllnofawllbhf
iadgdcdjstemphmnjihecoapdjjrprrqnhgccevdarufmliqij
gihhfgdcmxvicfauachlifhafpdccfseflcdgjncadfclvfmad
vrnaaahahndsikzssoywakgnfjjaihtniptwoulxbaeqkqhfwl
#include 
using namespace std;
int f[210];
int main()
{
  // 请在此输入您的代码
  string s = "tocyjkdzcieoiodfpbgcncsrjbhmugdnojjddhllnofawllbhfiadgdcdjstemphmnjihecoapdjjrprrqnhgccevdarufmliqijgihhfgdcmxvicfauachlifhafpdccfseflcdgjncadfclvfmadvrnaaahahndsikzssoywakgnfjjaihtniptwoulxbaeqkqhfwl";
  for (int i = 0; i < s.size(); i++) f[i] = 1;
  for (int i = 0; i < s.size(); i++)
  {
    for (int j = 0; j < i; j++)
    {
      if (s[i] > s[j]) f[i] += f[j];
      if (s[i] == s[j]) f[i] = 0;
    }
  }
  int ans = 0;
  for (int i = 0; i <s.size(); i++)
    ans += f[i];
  cout << ans << endl;
  return 0;
}

09 英文字母

问题描述
输入一个正整数n,输出第n个大写英文字母。
输入格式
输入一行包含一个正整数n。
输出格式
输出一行包含一个字母。
样例输入1

12

样例输出1

L

样例输入2

17

样例输出2

Q

评测用例规模与约定
对于所有评测用例,1≤n≤26。

#include 
#include 
int main()
{
  int n;
  scanf("%d",&n);
  printf("%c",n+64);
  return 0;
}

10 平行四边形面积

题目描述
给定一个平行四边形的底边长度l和高度h,求平行四边形的面积。
输入描述
输入的第一行包含一个整数l,表示平行四边形的底边长度。第二行包含一个整数 h,表示平行四边形的高。
其中,1≤l,h≤100
输出描述
输出一个数,表示平行四边形的面积。如果面积为整数,请直接输出这个整数,不带小数点。如果面积不是整数,请四舍五入保留正好一位小数。
输入输出样例
示例1
输入

5
6

输出

30
#include 
#include 
int main()
{
  float l,h;
  float s;
  int i;
  scanf("%f%f",&l,&h);
  s=l*h;
  i=(int)s;
  if(i==s)
  {
    printf("%d",i);
  }
  else
  {
    printf(".1f",s);
  }
  return 0;
}

你可能感兴趣的:(蓝桥杯刷题,蓝桥杯,算法,图论,c++,c语言)