当前位置: 首页 > article >正文

蓝桥杯普及题

[蓝桥杯 2024 省 B] 好数

题目描述

一个整数如果按从低位到高位的顺序,奇数位(个位、百位、万位……)上的数字是奇数,偶数位(十位、千位、十万位……)上的数字是偶数,我们就称之为“好数”。

给定一个正整数 N N N,请计算从 1 1 1 N N N 一共有多少个好数。

输入格式

一个整数 N N N

输出格式

一个整数代表答案。

样例 #1

样例输入 #1

24

样例输出 #1

7

样例 #2

样例输入 #2

2024

样例输出 #2

150

提示

样例 1 解释

24 24 24 以内的好数有 1 , 3 , 5 , 7 , 9 , 21 , 23 1,3,5,7,9,21,23 1,3,5,7,9,21,23,一共 7 7 7 个。

数据规模与约定

  • 对于 10 % 10\% 10% 的测试数据, 1 ≤ N ≤ 100 1 \leq N \le 100 1N100
  • 对于全部的测试数据, 1 ≤ N ≤ 1 0 7 1 \le N \leq 10^7 1N107

code:

#include<iostream>
using namespace std;
int n,ans=0;
int q[100000];
bool check(int x){
    int pos=0;
    while(x){
        q[++pos]=x%10;
        x/=10;
    }
    for(int i=1;i<=pos;i++){
        if(i%2!=0){
            if(q[i]%2==0) return false;
        }
        else{
            if(q[i]%2!=0) return false;
        }
    }
    return true;
}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        if(check(i)) ans++;
    }
    cout<<ans;
    return 0;
}

[蓝桥杯 2022 省 A] 求和

题目描述

给定 n n n 个整数 a 1 , a 2 , ⋯   , a n a_{1}, a_{2}, \cdots, a_{n} a1,a2,,an, 求它们两两相乘再相加的和,即

S = a 1 ⋅ a 2 + a 1 ⋅ a 3 + ⋯ + a 1 ⋅ a n + a 2 ⋅ a 3 + ⋯ + a n − 2 ⋅ a n − 1 + a n − 2 ⋅ a n + a n − 1 ⋅ a n S=a_{1} \cdot a_{2}+a_{1} \cdot a_{3}+\cdots+a_{1} \cdot a_{n}+a_{2} \cdot a_{3}+\cdots+a_{n-2} \cdot a_{n-1}+a_{n-2} \cdot a_{n}+a_{n-1} \cdot a_{n} S=a1a2+a1a3++a1an+a2a3++an2an1+an2an+an1an

输入格式

输入的第一行包含一个整数 n n n

第二行包含 n n n 个整数 a 1 , a 2 , ⋯ a n a_{1}, a_{2}, \cdots a_{n} a1,a2,an

输出格式

输出一个整数 S S S,表示所求的和。请使用合适的数据类型进行运算。

样例 #1

样例输入 #1

4
1 3 6 9

样例输出 #1

117

提示

对于 30 % 30 \% 30% 的数据, 1 ≤ n ≤ 1000 , 1 ≤ a i ≤ 100 1 \leq n \leq 1000,1 \leq a_{i} \leq 100 1n1000,1ai100

对于所有评测用例, 1 ≤ n ≤ 2 × 1 0 5 , 1 ≤ a i ≤ 1000 1 \leq n \leq 2\times10^5,1 \leq a_{i} \leq 1000 1n2×105,1ai1000

蓝桥杯 2022 省赛 A 组 C 题。

code:

#include<iostream>//本题可以提公因式,用前缀和算法
using namespace std;//a1*a2+a1*a3+...+a1*an=a1*(a2+a3+...+an)
typedef long long ll;
const int N=2e5;
int main(){
    int n,q[N];
    ll s[N];
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>q[i];
        s[i]=s[i-1]+q[i];
    }
    ll sum=0;
    for(int i=1;i<=n-1;i++){//an-1是最后一个数
        sum+=q[i]*(s[n]-s[i]);
    }
    cout<<sum;
    return 0;
}

[蓝桥杯 2023 省 A] 填空问题

题目描述

A. 幸运数

小蓝认为如果一个数含有偶数个数位,并且前面一半的数位之和等于后面一半的数位之和,则这个数是他的幸运数字。例如 2314 2314 2314 是一个幸运数字,因为它有 4 4 4 个数位,并且 2 + 3 = 1 + 4 2+3=1+4 2+3=1+4。现在请你帮他计算从 1 1 1 100000000 100000000 100000000 之间共有多少个不同的幸运数字。

B. 有奖问答

小蓝正在参与一个现场问答的节目。活动中一共有 30 30 30 道题目,每题只有答对和答错两种情况,每答对一题得 10 10 10 分,答错一题分数归零。

小蓝可以在任意时刻结束答题并获得目前分数对应的奖项,之后不能再答任何题目。最高奖项需要 100 100 100 分,所以到达 100 100 100 分时小蓝会直接停止答题。

已知小蓝最终实际获得了 70 70 70 分对应的奖项,请问小蓝所有可能的答题情况有多少种?

输入格式

这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分。

您可以通过提交答案文件的方式进行提交。你需要将你的答案放在 1.out2.out 中,其中 1.out 对应 A 题的答案,2.out 对应 B 题的答案。

输入文件包含一个字符,代表题目编号(AB),你需要输出对应的答案。

以下模板供参考:

#include<bits/stdc++.h>
using namespace std;

char pid;
int main() {
    cin >> pid;
    if(pid == 'A')
        puts("Answer for Problem A");
    else
        puts("Answer for Problem B");
    return 0;
}

输出格式

提示

第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 A-B

code:

#include<iostream>
using namespace std;
int ans=0;
int q[30];
bool check(int x){
    int pos=0;
    while(x){
        q[++pos]=x%10;
        x/=10;
    }
    if(q[1]%2==0){
        int l=0,r=0;
        for(int i=1;i<=pos/2;i++){
            l+=q[i];
        }
        for(int i=pos/2+1;i<=pos;i++){
            r+=q[i];
        }
        if(l==r) return true;
    }
    return false;
}
int main(){
    for(int i=1;i<=100000000;i++){
        if(check(i)) ans++;
    }
    cout<<ans;
    return 0;
}
#include <iostream>
using namespace std;
int ans = 0; 
int main() {
    int dp[31][10] = { 0 }; 
    dp[0][0] = 1;
    for (int i = 1; i <= 30; i++) { 
        for (int j = 0; j < 10; j++) { 
            if (j == 0) { 
                for(int a=0;a<10;a++){
                    dp[i][0] += dp[i-1][a];
                }
            }
            else {
                dp[i][j] += dp[i - 1][j - 1];
            }
        }
        ans += dp[i][7];
    }
    cout << ans << endl;
    return 0;
}

[蓝桥杯 2013 省 B] 翻硬币

题目背景

小明正在玩一个“翻硬币”的游戏。

题目描述

桌上放着排成一排的若干硬币。我们用 * 表示正面,用 o 表示反面(是小写字母,不是零),比如可能情形是 **oo***oooo,如果同时翻转左边的两个硬币,则变为 oooo***oooo。现在小明的问题是:如果已知了初始状态和要达到的目标状态,每次只能同时翻转相邻的两个硬币,那么对特定的局面,最少要翻动多少次呢?

输入格式

两行等长字符串,分别表示初始状态和要达到的目标状态,每行长度小于 1000 1000 1000

数据保证一定存在至少一种方案可以从初始状态和要达到的目标状态。

输出格式

一个整数,表示最小操作步数。

样例 #1

样例输入 #1

**********
o****o****

样例输出 #1

5

样例 #2

样例输入 #2

*o**o***o***
*o***o**o***

样例输出 #2

1

提示

source:蓝桥杯 2013 省 B 组 H 题

code:

#include<iostream>
#include<string>
using namespace std;
string s1,s2;
int res=0;
void turn(char &c){
    if(c=='*') c='o';
    else c='*';
}
int main(){
    cin>>s1>>s2;
    for(int i=0;i<s1.size();i++){
        if(s1[i]!=s2[i]){
            turn(s1[i]);
            turn(s1[i+1]);
            res++;
        }
    }
    cout<<res;
    return 0;
}

[蓝桥杯 2023 省 A] 平方差

题目描述

给定 L , R L,R L,R,问 L ≤ x ≤ R L \leq x \leq R LxR 中有多少个数 x x x 满足存在整数 y , z y,z y,z 使得 x = y 2 − z 2 x=y^2-z^2 x=y2z2

输入格式

输入一行包含两个整数 L , R L,R L,R,用一个空格分隔。

输出格式

输出一行包含一个整数满足题目给定条件的 x x x 的数量。

样例 #1

样例输入 #1

1 5

样例输出 #1

4

提示

【样例说明】
  • 1 = 1 2 − 0 2 1=1^2-0^2 1=1202
  • 3 = 2 2 − 1 2 3=2^2-1^2 3=2212
  • 4 = 2 2 − 0 2 4=2^2-0^2 4=2202
  • 5 = 3 2 − 2 2 5=3^2-2^2 5=3222
【评测用例规模与约定】

对于 40 % 40 \% 40% 的评测用例, L , R ≤ 5000 L,R \leq 5000 L,R5000

对于所有评测用例, 1 ≤ L ≤ R ≤ 1 0 9 1 \leq L \leq R \leq 10^9 1LR109

第十四届蓝桥杯大赛软件赛省赛 C/C++ 大学 A 组 C

暴力code:全t

#include<iostream>
using namespace std;
typedef long long ll;
ll l,r;
int ans=0;
bool check(int x){
    for(ll i=1;i<=r;i++){
        for(ll j=0;j<=r;j++){
                if(x==i*i-j*j)
                    return true;
        }
    }
    return false;
}
int main(){
    cin>>l>>r;
    for(ll i=l;i<=r;i++){
        if(check(i)) ans++;
    }
    cout<<ans;
    return 0;
}

正解:

x=y^2 + z^ 2=(y-z)(y+z);
联立:y-z=a;
y+z=b;
a
b=x;
解得:y=(a+b)/2;
z=(a-b)/2;
得到a+b、a-b必须是偶数
偶数+偶数=偶数,偶数-偶数=偶数
奇数+奇数=偶数,奇数-奇数=偶数
得出a和b必须同时为偶数或者奇数。
也就是x必须存在一对同时为偶数或者为奇数的因数
这句话等价于x是4的倍数,或者是一个奇数(1乘奇数等于奇数)

code:

#include <bits/stdc++.h>
using namespace std;
int main(){
	int ans=0,l,r;
	cin>>l>>r;
	for(int i=l;i<=r;i++){
		if(i%4==0||i%2!=0)ans++;
	}
	cout<<ans;
}

[蓝桥杯 2015 省 B] 移动距离

题目描述

X 星球居民小区的楼房全是一样的,并且按矩阵样式排列。其楼房的编号为 $1,2,3, \cdots $ 。

当排满一行时,从下一行相邻的楼往反方向排号。

比如:当小区排号宽度为 6 6 6 时,开始情形如下:

1  2  3  4  5  6
12 11 10 9  8  7
13 14 15 .....

我们的问题是:已知了两个楼号 m m m n n n,需要求出它们之间的最短移动距离。(不能斜线方向移动)

输入格式

输入为 3 3 3 个整数 w , m , n w,m,n w,m,n,空格分开,都在 1 1 1 10000 10000 10000 范围内。

w w w 为排号宽度, m , n m,n m,n 为待计算的楼号。

输出格式

要求输出一个整数,表示 m m m n n n 两楼间最短移动距离。

样例 #1

样例输入 #1

6 8 2

样例输出 #1

4

样例 #2

样例输入 #2

4 7 20

样例输出 #2

5

提示

时限 1 秒, 256M。

蓝桥杯 2015 年省赛 B 组 H 题。

code:

#include<iostream>
#include<cmath>
using namespace std;
pair<int ,int>p1;
pair<int ,int>p2;
int w,m,n;
int main(){
    cin>>w>>m>>n;
    p1.first=(m+w-1)/w;
    p2.first=(n+w-1)/w;
    if(p1.first%2!=0) p1.second=m%w;//奇数行
    else p1.second=w-m%w+1;//偶数行
    if(p2.first%2!=0)  p2.second=n%w;
    else p2.second=w-n%w+1;
    int ans=abs(p1.first-p2.first)+abs(p1.second-p2.second);
    cout<<ans;
    return 0;
}

[蓝桥杯 2016 国 C] 赢球票

题目描述

某机构举办球票大奖赛。获奖选手有机会赢得若干张球票。

主持人拿出 N N N 张卡片(上面写着 1 ∼ N 1 \sim N 1N 的数字),打乱顺序,排成一个圆圈。

你可以从任意一张卡片开始顺时针数数 $:1,2,3 \cdots $。

如果数到的数字刚好和卡片上的数字相同,则把该卡片收入囊中,从下一个卡片重新数数。

直到再无法收获任何卡片,游戏结束。囊中卡片数字的和就是赢得球票的张数。

比如:

卡片排列是: 1 , 2 , 3 1,2,3 1,2,3

我们从 1 1 1 号卡开始数,就把 1 1 1 号卡拿走。再从 2 2 2 号卡开始,但数的数字无法与卡片对上,

很快数字越来越大,不可能再拿走卡片了。因此这次我们只赢得了 1 1 1 张球票。

还不算太坏!如果我们开始就傻傻地从 2 2 2 3 3 3 号卡片数起,那就一张卡片都拿不到了。

如果运气好,卡片排列是 2 , 1 , 3 2,1,3 2,1,3

那我们可以顺利拿到所有的卡片!

本题的目标就是:已知顺时针卡片序列。

随便你从哪里开始数,求最多能赢多少张球票(就是收入囊中的卡片数字之和)

输入格式

第一行一个整数 N ( N < 100 ) N(N<100) N(N<100),表示卡片数目。

第二行 N N N 个整数,表示顺时针排列的卡片。

输出格式

一行,一个整数,表示最好情况下能赢得多少张球票。

样例 #1

样例输入 #1

3
1 2 3

样例输出 #1

1

样例 #2

样例输入 #2

3
2 1 3

样例输出 #2

6

提示

时限 1 秒, 256M。蓝桥杯 2016 年第七届国赛

code:

#include<iostream>
#include<algorithm>
using namespace std;
int n,ans=0;
int q[110];
int main(){
    cin>>n;
    for(int i=1;i<=n;i++){
        cin>>q[i];
    }
    for(int i=1;i<=n;i++){
        int j=i;//代表目前的卡片
        int x=1;//代表报的数
        int sum=0;//拿走的卡片之和
        int p[110]={0};//标记卡片是否被取走
        while(true){
            if(!p[j]){
                if(q[j]==x){
                    x=0;
                    sum+=q[j];
                    p[j]=1;
                }
                x++;
            }
            j=j%n+1;//当j=n时j应该赋值为1
            if(x>n||sum==(n+1)*n/2) break;
        }
        ans=max(sum,ans);
    }
    cout<<ans;
    return 0;
}

[蓝桥杯 2017 省 B] k 倍区间

题目描述

给定一个长度为 N N N 的数列, A 1 , A 2 , ⋯ A N A_1,A_2, \cdots A_N A1,A2,AN,如果其中一段连续的子序列 A i , A i + 1 , ⋯ A j ( i ≤ j ) A_i,A_{i+1}, \cdots A_j(i \le j) Ai,Ai+1,Aj(ij) 之和是 K K K 的倍数,我们就称这个区间 [ i , j ] [i,j] [i,j] K K K 倍区间。

你能求出数列中总共有多少个 K K K 倍区间吗?

输入格式

第一行包含两个整数 N N N K K K ( 1 ≤ N , K ≤ 1 0 5 ) (1 \le N,K \le 10^5) (1N,K105)

以下 N N N 行每行包含一个整数 A i A_i Ai ( 1 ≤ A i ≤ 1 0 5 ) (1 \le A_i \le 10^5) (1Ai105)

输出格式

输出一个整数,代表 K K K 倍区间的数目。

样例 #1

样例输入 #1

5 2
1  
2  
3  
4  
5

样例输出 #1

6

提示

时限 2 秒, 256M。蓝桥杯 2017 年第八届

code:

#include<iostream>
using namespace std;
const int N=100010;
int n,k;
long long s[N];
int cnt[N];
int main(){
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>s[i];
        s[i]+=s[i-1];
    }
    long long res=0;
    cnt[0]++;//第一个为s[0]
    for(int i=1;i<=n;i++){
        res+=cnt[s[i]%k];
        cnt[s[i]%k]++;
    }
    cout<<res;
    return 0;
}

http://www.kler.cn/news/367554.html

相关文章:

  • JavaEE初阶---多线程(三)---内存可见性/单例模式/wait,notify的使用解决线程饿死问题
  • 颠覆级AI:10秒生成超清视频
  • JavaEE初阶---文件IO总结
  • android 添加USB网卡并配置DNS
  • SMA-BP时序预测 | Matlab实现SMA-BP黏菌算法优化BP神经网络时间序列预测
  • 面包种类图像分割系统:多层面改进
  • Android中导入讯飞大模型ai智能系统
  • nodejs写入日志文件
  • Linux: Shell编程中的应用之基于sh进行数据统计
  • 【C++ 真题】B2106 矩阵转置
  • 基于java SpringBoot和Vue校园求职招聘系统设计
  • 【牛客算法】某司面试算法题:设计LRU缓存结构
  • static 关键字的用法
  • 【Java】LinkedList实现类的使用
  • 苹果预告下周发布Mac新品:全系标配M4系列芯片
  • 前端处理API接口故障:多接口自动切换的实现方案
  • bluez hid host介绍,连接键盘/鼠标/手柄不是梦,安排
  • 日常实习与暑期实习详解
  • java使用正则表达式校验字符串pwd,是否符合包含大写小写数字特殊字符长度超过8位
  • Codeforces Round 981 (Div. 3) A - E 详细题解(C++)
  • maven分模块设计与私服
  • 如何用mmclassification训练多标签多分类数据
  • 如何理解前端与后端开发
  • entwine 和 conda环境下 使用和踩坑 详细步骤! 已解决
  • uptime kuma拨测系统
  • 身份证归属地查询接口-在线身份证归属地查询-身份证归属地查询API