蓝桥杯例题(附源码)

hello,今天带来几道蓝桥杯的例题。

1.字符串改成大写, 逆序输出:

题目描述

输入一个只包括大小写的字符串,全部成大写, 逆序输出

输入

一个只包括大小写的字符串

输出

全部成大写, 逆序输出

样例输入 Copy

djdhWio

样例输出 Copy

OIWHDJD

来源/分类

蓝桥杯

[提交] [状态]

代码

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string s;
	cin>>s;
	for (int i=0;i<s.size();i++)
	{
		if (s[i]>=97 && s[i]<=122)
		{
			s[i]-=32;
		}
	}
	for (int i=s.size()-1;i>=0;i--)
	{
		cout<<s[i];
	}
	return 0;
}
list1 = input()
list2 = list1.upper()
print(list2[::-1])


------------------------------------------------------------------------------------------------------------------------------

2.蓝桥杯赛迷宫(第10届C++省赛压轴题)

题目描述

把一个 n 行 m 列的字符阵列看做一个迷宫,迷宫仅包含 L、Q、B、S 中的大写字母(蓝桥杯赛的汉语拼音

首字母)。

初始时,你可以从任意一个“L”字母开始,移向相邻的“Q”字母,然后从此“Q”字母出发,移向相邻的

“B”字母,然后从此“B”字母出发,移向相邻的“S”字母……。这样,你就算是走过了一个“LQBS”字符序

列。

接下来,仍然可以从此“S”字母出发,移向相邻的“L”字母……,重复上述的动作,你就可以不断地走过

“LQBS”序列。

请注意,所谓相邻仅包含上、下、左、右 4 个方向,且只能从 L->Q,从 Q->B,从 B->S,从 S->L。

可以想像,由于选择的出发点不同,我们有可能在迷宫中走过无数次的“LQBS”,或者是有限次的“LQBS”,

或者一次也走不了。

编程实现:

请你编写程序,求出在给定的迷宫中,我们最多可以走过多少次“LQBS”?



输入:

第一行:正整数 n,m,表示迷宫的规模为 n 行 m 列(0<m<100,0<n<100)

接下来的 n 行:每行 m 个符合题意的字母,字母间无空格。



输出:

一个整数。即:如果在迷宫中可以无限次的走过“LQBS”,输出-1,否则,输出可以走过“LQBS”的最

多次数。



样例 1 输入:

1 2

LQ

样例 1 输出:

0

样例 2 输入:

3 3

LSB

QBQ

BSL

样例 2 输出:

-1

样例 3 输入:

4 4

BLQB

BBQS

SBQL

QQQQ

样例 3 输出:蓝桥杯全国软件大赛青少年创意编程 C++组

2

将程序命名为“LQBS.cpp”。

样例输入 Copy

4 4
BLQB
BBQS
SBQL
QQQQ

样例输出 Copy

2

来源/分类

蓝桥杯   搜索 DFS 黄金 

// ConsoleApplication7.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//

#include <iostream>
#include <vector>
using namespace std;
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
int n, m;
int gover = 0; 
vector<char> resvec;
int sum = 0; 
char gmap[105][105];
//char sx[128] = { 'L','Q','B','S' };
bool visitedL[105][105] = {false};
bool ifposok(int nx, int ny)
{
    if (nx >= 1 && nx <= n && ny >= 1 && ny <= m)
    {
        return true;
    }
    return false;
}
bool findit()
{
    if (resvec.size() % 4 == 0 && resvec[resvec.size() - 1] == 'S')
    {
        if (resvec[resvec.size() - 2] == 'B')
        {
            if (resvec[resvec.size() - 3] == 'Q')
            {
                if (resvec[resvec.size() - 4] == 'L')
                {
                    return true;
                }
            }

        }
    }
    return false;
    
   
}
bool ifalphaok(int x ,int y )
{

    
   
    if (resvec.empty() && gmap[x][y] == 'L')
        return true;
    if (resvec[resvec.size()-1] == 'L' && gmap[x][y] == 'Q')
        return true;
    if (resvec[resvec.size() - 1] == 'Q' && gmap[x][y] == 'B')
        return true;
    if (resvec[resvec.size() - 1] == 'B' && gmap[x][y] == 'S')
        return true;
    if (resvec[resvec.size() - 1] == 'S' && gmap[x][y] == 'L')
    {
        visitedL[x][y] = true;
            return true;
    }
        
    

    return false;

}
int dfs(int x, int y)
{

    if (findit())
    {
        // over 找到了一种结果  
        sum++;

        if (sum > 1000)
        {
            cout << -1;
            gover = 1; 
            return 1;
         
        }
    }
   
    {
        for (int i = 0; i <  4; i++)
        {
            //如果 这个i 符合 ,选 中 。 。
            int newx = x + dx[i];
            int newy = y + dy[i]; 

            if (ifposok(newx, newy))
            {
                if (ifalphaok(newx, newy))
                {
                    resvec.push_back(gmap[newx][newy]);
                    dfs(newx, newy);
                    if (gover) return 1;
                    resvec.pop_back();
                }
                
            }
            //dfs
            
            //把状态恢复 
        }
    }
    return 1;
}



int main()
{

    cin >> n >> m; 

    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            cin >> gmap[i][j];
        }
    }


    for (int i = 1; i <= n; i++)
    {
        for (int j = 1; j <= m; j++)
        {
            if (gmap[i][j] == 'L')
            {
                if (visitedL[i][j] == false)
                {
                    visitedL[i][j] = true;
                    resvec.push_back(gmap[i][j]);
                    dfs(i, j);
                    if (gover) return 1;
                    resvec.pop_back();

                }
                       
            }
            
        }
    }
   
    cout << sum; 
}
  

---------------------------------------------------------------------------------------------------------------------------------

3.蓝桥杯训练-年号字符串

题目描述

【题目】
字母 A 对应数字 1,B 对应 2,以此类推,用 Z 对应 26。对于 27 以上的数字,用两位或更长位的字符串来对应,例如 AA 对应 27,AB 对 应 28,AZ 对应 52,LQ 对应 329。 请问 2021 对应的字符串是什么?

样例输入 Copy

2021

样例输出 Copy

BYS

来源/分类

蓝桥杯 数的进制  

#include <bits/stdc++.h>
using namespace std;
int main() 
{
    int n;
    string s;
    cin>>n;
    while(n)
	{
    s=char((n%26+25)%26+65)+s;
    n/=26;
    }
    cout<<s;
    return 0;
}

---------------------------------------------------------------------------------------------------------------------------------

4.蓝桥杯省赛模拟B-写个“2”

题目描述

2020年2月,小蓝参加“蓝桥杯大赛青少年创意编程C++组”选拔赛。在一个这么“2”的时间里参 赛,小蓝一时高兴,忍不住在键盘上敲出了一个会写“2”的程序。

输入

一个整数 n(3<=n<=100)

输出

一个由“*”组成的长、宽都是 n 的“2”字图形,具体请参见样例。
 

样例输入 Copy

5

样例输出 Copy

*****
   *
  *
 *
*****

来源/分类

蓝桥杯 初级 循环  

#include<iostream>
using namespace std;
int main(){
	int a;
	cin>>a;
	for(int i=0;i<a;i++)
		cout<<'*';
	cout<<endl;
	for(int i=2;i<=a-1;i++){
		for(int j=0;j<a-i;j++)	
			cout<<" ";	
		cout<<'*'<<endl;	
	}
	for(int i=0;i<a;i++)
		cout<<'*';
	return 0;
}




---------------------------------------------------------------------------------------------------------------------------------

5.找出1~N范围内的所有回文数字

题目描述

一个数字,如果从左到右读与从右到左读是一样的,就称为回文数字,例如:383、19891都 是回文数字。
输入一个N值(N>0  && N<10000),请编程找出1到N范围内(包含1和N)的所有回文数字。

样例输入 Copy

100

样例输出 Copy

1
2
3
4
5
6
7
8
9
11
22
33
44
55
66
77
88
99

来源/分类

青铜  循环 条件  蓝桥杯 

#include <iostream>
using namespace std;
int main(){
	int n;
	cin>>n;
	for(int i=1;i<=n;i++){
		int ik=i;
		int ig=0;
		while(ik!=0){
			ig=ig*10+ik%10;
			ik/=10;
		}
		if(ig==i){
			cout<<i<<endl;
		}
	}
	return 0;
}

---------------------------------------------------------------------------------------------------------------------------------

6.第10届蓝桥杯-猫吃鱼

题目描述

明明家从 1 号站点出发,开车去旅游,⼀共要经过 n 个站点,依次为 1,2、3......n。 由于明明带上了⼼爱的小猫,在每个站点都要为⼩猫提供一条⻥用做美餐 (包括 1 号站点)。
除了 1 号站点只能吃 1 号站点买的⻥,其他站点既可以吃当地买的鱼,也可吃之前经过的站点买了了存入车载冰箱中的鱼。 但⻋载冰箱消耗的电能来⾃汽油,所以每条鱼用冰箱保存到下⼀站的费用与各个站点的汽油价格有关。
为使问题简化,我们约定: (1)车从某站开出时油箱中都是此站点刚加的汽油。
(2)⻋载冰箱能容纳⼀路上需要的所有鱼。 即:每条⻥的费⽤既包括购买时的费用,也包括⽤冰箱保存鱼的费用。 
编程实现:
为了降低小猫吃鱼的总代价,明明预先上网查到了这 n 个站点的鱼价和 汽油价格。并据此算出每个站点买一条鱼的费⽤以及从该站点到下一站用冰箱保存一条鱼的费用。你能帮明明算出这一路上⼩猫吃鱼的最⼩总费用吗?
 

输入

第⼀行:站点数 n,1<n<100。
接下来的 n 行:每⾏两个以空格分隔的正整数,表示:这⼀站买一条鱼的费用,以及从这⼀站把每条鱼保存到下一站的费用,两个费用均为小于 10000 的正整数。

输出

最⼩总费用,是一个正整数。

样例输入 Copy

5
6 3
7 1
3 2
8 3
9 5

样例输出 Copy

29

来源/分类

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,a=0,b=0,min=2147483647,s=0;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a>>b;
        if(min>a)
        {
            min=a;
        }
        s=s+min;
        min=min+b;
    }
    cout<<s;
    return 0;
} 

这后面还有好几道,我下次再发吧。(求求了,给个关注和评论吧!!!!!)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值