蓝桥杯第十四讲--数论【习题】

简介: 蓝桥杯第十四讲--数论【习题】

前言

蓝桥杯官网:蓝桥杯大赛——全国大学生TMT行业赛事

✨本博客讲解 蓝桥杯C/C++ 备赛所涉及算法知识,此博客为第十四讲:数论【习题】

本篇博客所包含习题有:

👊最大比例

👊C 循环

👊正则问题


数论【例题】见博客:蓝桥杯第十四讲–数论【例题】


博客内容以题代讲,通过讲解题目的做法来帮助读者快速理解算法内容,需要注意:学习算法不能光过脑,更要实践,请读者务必自己敲写一遍本博客相关代码!!!


最大比例

来源: 第七届蓝桥杯省赛C++A/B组

题目要求

题目描述:

image.png

输入格式:

image.png

输出格式:

一个形如 A / B  的分数,要求 A 、B  互质,表示可能的最大比例系数。

数据范围:

image.png

输入样例1:

3
1250 200 32

输出样例1:

25/4

输入样例2:

4
3125 32 32 200

输出样例2:

5/2

输入样例3:

3
549755813888 524288 2

输出样例3:

4/1

思路分析

image.png

代码

#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
const int N = 110;
int n;
LL a[N], b[N], x[N];
LL gcd(LL a, LL b)
{
    return b ? gcd(b, a % b) : a;
}
LL gcd_sub(LL a, LL b)
{
    if (a < b) swap(a, b);
    if (b == 1) return a;
    return gcd_sub(b, a / b);
}
int main()
{
    cin >> n;
    for (int i = 0; i < n; i ++ ) cin >> x[i];
    sort(x, x + n);
    int cnt = 0;
    for (int i = 1; i < n; i ++ )
        if (x[i] != x[i - 1])
        {
            LL d = gcd(x[i], x[0]);
            a[cnt] = x[i] / d;
            b[cnt] = x[0] / d;
            cnt ++ ;
        }
    LL up = a[0], down = b[0];
    for (int i = 1; i < cnt; i ++ )
    {
        up = gcd_sub(up, a[i]);
        down = gcd_sub(down, b[i]);
    }
    cout << up << '/' << down << endl;
    return 0;
}

C 循环

题目要求

题目描述:

对于 C 语言的循环语句,形如:

for (variable = A; variable != B; variable += C)
  statement;

请问在 k 位存储系统中循环几次才会结束。

若在有限次内结束,则输出循环次数。否则输出死循环。

输入格式:

多组数据,每组数据一行四个整数 A , B , C , k 。

读入以 0 00 0 结束。

输出格式:

若在有限次内结束,则输出循环次数。

否则输出FOREVER。

数据范围:

image.png

输入样例:

3 3 2 16
3 7 2 16
7 3 2 16
3 4 2 16
0 0 0 0

输出样例:

0
2
32766
FOREVER

思路分析

本题用到了 扩展欧几里得算法,具体原理可见博客:数学知识:扩展欧几里得算法

image.png

代码

#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long LL;
LL exgcd(LL a, LL b, LL &x, LL &y)
{
    if (b == 0)
    {
        x = 1, y = 0;
        return a;
    }
    LL d = exgcd(b, a % b, y, x);
    y -= a / b * x;
    return d;
}
int main()
{
    LL a, b, c, k;
    while (cin >> a >> b >> c >> k, a || b || c || k)
    {
        LL x, y;
        LL z = 1ll << k;
        LL d = exgcd(c, z, x, y);
        if ((b - a) % d) cout << "FOREVER" << endl;
        else
        {
            x *= (b - a) / d;
            z /= d;
            cout << (x % z + z) % z << endl;
        }
    }
    return 0;
}

正则问题

来源: 第八届蓝桥杯省赛C++A组,第八届蓝桥杯省赛JAVAA组

题目要求

题目描述:

image.png

输入格式:

一个由 x ( ) ∣  组成的正则表达式。

输出格式:

输出所给正则表达式能接受的最长字符串的长度。

数据范围:

输入长度不超过 100 ,保证合法。

输入样例:

((xx|xxx)x|(x|xx))xx 

输出样例:

6

思路分析

本图来自:https://www.acwing.com/user/myspace/index/1099/

网络异常,图片无法展示
|

代码

#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int k;
string str;
int dfs()
{
    int res = 0;
    while (k < str.size())
    {
        if (str[k] == '(')  // 处理 (......)
        {
            k ++ ;  // 跳过 '('
            res += dfs();
            k ++ ; // 跳过 ')'
        }
        else if (str[k] == '|')
        {
            k ++ ;  // 跳过 '|'
            res = max(res, dfs());
        }
        else if (str[k] == ')') break;
        else
        {
            k ++ ;  // 跳过 'x'
            res ++ ;
        }
    }
    return res;
}
int main()
{
    cin >> str;
    cout << dfs() << endl;
    return 0;
}






目录
相关文章
|
移动开发 算法 机器人
[蓝桥杯] 二分与前缀和习题练习
又来更新了。二分与前缀和是蓝桥杯比较常考的内容,所以我们要多加练习这方面的习题。二分与前缀和的难度相对来说不算大,我们应该掌握其关键要点。
106 0
|
算法
[蓝桥杯] 递归与递推习题训练
蓝桥杯比赛只有四十天左右啦,最近会按照模块更新一些有关蓝桥杯算法题。学习算法不仅仅是为了参见比赛,更是以后找工作的一个敲门砖。废话不多说,我们直接看题。
79 0
|
存储 算法 Java
【数据结构】蓝桥杯常见习题(二)
【数据结构】蓝桥杯常见习题(二)
10974 0
|
存储 Java C#
【数据结构】蓝桥杯常见习题(一)
【数据结构】蓝桥杯常见习题(一)
648 0
|
算法 C++
蓝桥杯第十五讲--复杂dp【习题】
蓝桥杯第十五讲--复杂dp【习题】
248 0
蓝桥杯第十五讲--复杂dp【习题】
|
算法 C++
蓝桥杯第十三讲--树状数组与线段树【习题】
蓝桥杯第十三讲--树状数组与线段树【习题】
180 0
蓝桥杯第十三讲--树状数组与线段树【习题】
|
存储
蓝桥杯第十二讲--图论【习题】(二)
蓝桥杯第十二讲--图论【习题】
115 0
蓝桥杯第十二讲--图论【习题】(二)
|
机器学习/深度学习 算法 C++
蓝桥杯第十二讲--图论【习题】(一)
蓝桥杯第十二讲--图论【习题】
201 0
蓝桥杯第十二讲--图论【习题】(一)
|
人工智能 算法 程序员
蓝桥杯第十一讲--双指针【例/习题】
蓝桥杯第十一讲--双指针【例/习题】
151 0
蓝桥杯第十一讲--双指针【例/习题】
|
人工智能 算法 BI
蓝桥杯第十讲--贪心【习题】
蓝桥杯第十讲--贪心【习题】
220 0
蓝桥杯第十讲--贪心【习题】