蓝桥杯-刷题-补基础(加强版)

news2024/10/7 12:25:33

🌼feels good😃串烧 - 许天昱/陈旭辉-nn/单子玹/蒋笛含 - 单曲 - 网易云音乐

🌼10道入门题  ---  明显比上篇博客难了一点,要慢慢做了

目录

一,第k个素数

二,最大公约数

三,最小公倍数

四,图像旋转

五,计算鞍点

六,幂字符串

七,同学分组

八,字符串排序

九,同构数

十,素数回文数的个数

总结


一,第k个素数

P1052 - 第k个素数 - New Online Judge (ecustacm.cn)

1,首先写个判断素数的函数

2,主函数里先对k = 1, k = 2判断,分别输出2和3

3,优化:

(1)judge()判断素数时,取余只需要到平方根

(2)主函数遍历时,3以后的偶数都不是素数

#include<iostream>
using namespace std;
int judge(int n) //判断素数
{
    for(int i = 2; i*i <= n; ++i) {
        if(n % i == 0) {
            return false;
        }
    }
    return true;
}
int main()
{
    int i, k, c = 2; //第c个素数
    cin>>k;
    for(i = 3; c <= k; i += 2) { //3以后的偶数都不是素数
        if(judge(i)) c++;
    }
    if(k == 1) cout<<2;
    else if(k == 2) cout<<3;
    else cout<<i - 2;
    return 0;
}

二,最大公约数

P1053 - 最大公约数 - New Online Judge (ecustacm.cn)

1,公式:两数a, b,最大公约数p, 最小公倍数q,则 a * b = p * q

2, 两数公因子累乘可得最大公约数

3,辗转相除法(推荐)

比如26和39, 26 % 39 = 26 --> 39 % 26 = 13 --> 26 % 13 = 0, 所以最大公约数为13

就是用被取余的数,取余余数,当结果等于0, 此时被取余的数就是最大公约数

#include<iostream>
using namespace std;
int main()
{
    int a, b;
    while(cin>>a>>b) {
        int temp = b;
        while(temp) {
            temp = a % b;
            a = b;
            b = temp;
        }
        cout<<a<<endl;
    }
    return 0;
}

三,最小公倍数

P1054 - 最小公倍数 - New Online Judge (ecustacm.cn)

通过最大公约数来求

注意单个数字最大10^9,所以乘积满足long long

#include<iostream>
using namespace std;
int main()
{
    long long a, b;
    while(cin>>a>>b) {
        long long temp = b, pro = a * b;
        while(temp) {
            temp = a % b;
            a = b;
            b = temp;
        }
        cout<<pro / a<<endl;
    }
    return 0;
}

四,图像旋转

P1055 - 图像旋转 - New Online Judge (ecustacm.cn)

 

在草稿纸举个4行3列的例子后得到

旋转前的行标 + 旋转后列标 j - 1= 旋转前总行数(n)

旋转前的列标 = 旋转后的行标 i

所以,用旋转后的i, j表示出旋转前的i, j即可

输入a[i][j],输出a[n + 1 - j][i] 
但仅这样,第一次Ac 7% ×,因为m, n的范围不对,只是在样例m = 3, n = 3的情况对了

cin>>n>>m;
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= m; ++j)
            cin>>a[i][j]; //输入

    for(int i = 1; i <= n; ++i){
        for(int j = 1; j <= m; ++j){
            cout<<a[n + 1 - j][i]<<" "; //输出
        }
        cout<<endl;
    }

输出时需要m, n反过来

#include<iostream>
using namespace std;
int a[110][110];
int main()
{
    int n, m;
    cin>>n>>m;
    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= m; ++j)
            cin>>a[i][j]; //输入

    for(int i = 1; i <= m; ++i){
        for(int j = 1; j <= n; ++j){
            cout<<a[n + 1 - j][i]<<" "; //输出
        }
        cout<<endl;
    }
    return 0;
}

延伸:矩阵的转置是逆时针旋转90°,而本题是顺时针旋转90° 

五,计算鞍点

P1056 - 计算鞍点 - New Online Judge (ecustacm.cn)

 

 考虑用ma[]数组保存每行最大值,mi[]数组保存每列最小值,然后ma[i] == mi[i]即可输出

#include<iostream>
#include<algorithm> //sort()
using namespace std;
int a[10][10], ma[10], mi[10];

int main()
{
    int i, j;
    for(i = 1; i <= 5; ++i)
        for(j = 1; j <= 5; ++j)
            cin>>a[i][j]; //输入矩阵
    for(i = 1; i <= 5; ++i) {
        int Max = -666666, Min = 666666;
        for(j = 1; j <= 5; ++j){
            Max = max(Max, a[i][j]);
            Min = min(Min, a[j][i]);
        }
        ma[i] = Max; //第i行最大值
        mi[i] = Min; //第j列最小值, 大坑:是mi[i]不是mi[j]
    }
    int flag = 1;
    for(j = 1; j <= 5; ++j)
        for(i = 1; i <= 5; ++i)
            if(ma[i] == mi[j]) { //同时满足
                cout<<i<<" "<<j<<" "<<ma[i];
                flag = 0;
            }
    if(flag) cout<<"not found";
    return 0;
}

六,幂字符串

P1057 - 幂字符串 - New Online Judge (ecustacm.cn)

 

1,本题核心:substr()函数,头文件是#include<cstring>,例如

#include<iostream>
#include<cstring> //s.substr()
using namespace std;
int main()
{
    string s = "01234567", s1 = s.substr(5), s2 = s.substr(6, 2);
    cout<<s<<endl<<s1<<endl<<s2;
    return 0;
}
01234567
567
67

substr(i)表示从下标 i 开始到结尾,substr(i, j)表示从下标 i 开始截取 j 个字符

2,思路

(1)求连续相同的子串的数量,所以我们从一个字母开始截取,不一样就break

(2)从2个字母开始截取,如果2个字母的子串s1 == 后面每两个字母的子串s2,输出重复次数

(3)否则3个3个地截取......

第一次 Accepted 90%

#include<iostream>
#include<cstring> //s.substr()
using namespace std;
int main()
{
    string s, s1, s2;
    cin>>s;
    int ans = 0, k = 1, len = s.size(); //k为子串长度
    while(k < len) {
        int j, flag = 1;
        s1 = s.substr(0, k);
        for(j = k; j < len; j += k) {
            s2 = s.substr(j, k);
            if(s1 != s2) {
                flag = 0;
                break;
            }
            else ans++; //子串出现次数
        }
        if(flag) break;
        k++;
    }
    if(k == len) cout<<1;
    else cout<<ans + 1; //加上第一个子串
    return 0;
}

试出两组错误数据

aabaab
3

aaabaaab
4

原来是ans放在了while外面,导致aabaab中,前面的aa使输出多了1(常犯错误),务必每次更新

Accepted 100% 

#include<iostream>
#include<cstring> //s.substr()
using namespace std;
int main()
{
    string s, s1, s2;
    cin>>s;
    int ans, k = 1, len = s.size(); //k为子串长度
    while(k < len) {
        ans = 0; //每次都要清零
        int flag = 1;
        s1 = s.substr(0, k);
        for(int j = k; j < len; j += k) {
            s2 = s.substr(j, k);
            if(s1 != s2) {
                flag = 0;
                break;
            }
            else ans++; //子串出现次数
        }
        if(flag) {
            break;
        }
        k++;
    }
    if(k == len) cout<<1;
    else cout<<ans +1;
    return 0;
}

七,同学分组

P1058 - 同学分组 - New Online Judge (ecustacm.cn)

 

1,结构体联系同一组的名字

2,q次询问时遍历,比较两字符串相等,需要strcmp()函数,头文件#include<cstring>

strcmp(s1, s2)s1 == s2,输出 == 0 s1 > s2,输出 > 0 s1 < s2,输出 < 0

给大家补充个:头文件#include<cstring>,常用函数有

strlen()求字符数组长度,strcmp()比较两字符串大小,memcpy()拷贝数组,字符串等,

memset()初始化数组,结构体等,strcpy(a, b)将字符串b拷贝到a

第一次报错error: from char to const char,因为把 if(!strcmp(s, a[j].s1)) 写成了 if(!strcmp(s[i], a[j].s1)),改正后运行错误 40%

第二次 运行错误 40% --> Ac 100%  原来是数组声明小了,struct group a[1010]; 写成了

struct group a[20]; (受名字20个字符的误导)

#include<iostream>
#include<cstring> //strcmp(),compare的意思
using namespace std;
struct group
{
    char s1[20], s2[20];
};
int main()
{
    int n, q;
    cin>>n>>q;
    struct group a[1010];
    char s[20];
    for(int i = 0; i < n; ++i)
        cin>>a[i].s1>>a[i].s2; //输入名字
    for(int i = 0; i < q; ++i) {
        cin>>s;
        for(int j = 0; j < n; ++j) {//遍历查找
            if(!strcmp(s, a[j].s1)) cout<<a[j].s2<<endl;
            if(!strcmp(s, a[j].s2)) cout<<a[j].s1<<endl;
        }
    }
    return 0;
}

八,字符串排序

P1059 - 字符串排序 - New Online Judge (ecustacm.cn) 

 

1,已知小写字母比对应大写ASCII值多32

2,首先是输入问题,string s[1010]; cin>>s[i]; 表示输入一个字符串

那么转换大小写时,s[i][j]表示单个字母,而输出时s[i]表示整个字符串

#include<iostream>
#include<algorithm> //sort()
using namespace std;
int main()
{
    string s[1010];
    int n;
    cin>>n;
    for(int i = 0; i < n; ++i)
        cin>>s[i];
    for(int i = 0; i < n; ++i)
        for(int j = 0; j < 10; ++j) {
            if(s[i][j] >= 'a' && s[i][j] <= 'z')
                s[i][j] -= 32;
            else if(s[i][j] >= 'A' && s[i][j] <= 'Z')
                s[i][j] += 32;
        }
    sort(s, s + n);
    for(int i = 0; i < n; ++i) cout<<s[i]<<endl;
    return 0;
}

九,同构数

P1060 - 同构数 - New Online Judge (ecustacm.cn) 

 

 

1,考虑到10^5的平方,用long long稳一点

2,第一次敲完,测试样例,输出少了25和625,然后我把judge()判断同构数的函数,粘贴到新建代码里测试了一下:

#include<iostream>
#include<cmath> //pow()
using namespace std;

int judge(long long x)
{
    long long sq = pow(x, 2);
    cout<<x<<"(x)"<<" ";
    cout<<sq<<"(sq)"<<" ";
    while(x) {
        if(x % 10 != sq % 10)
            return false;
        x /= 10;
        cout<<x<<"(x)"<<" ";
        sq /= 10;
        cout<<sq<<"(sq)"<<" ";
    }
    return true;
}
int main()
{
    int n;
    while(cin>>n) {
        if(judge(n)) cout<<n<<endl;
        else cout<<"no match"<<endl;
    }

    return 0;
}
5
5(x) 24(sq) no match

5的平方 = 24???难怪,接着百度,发现pow(5, 2) = 24.999999....所以int把它变成了24.....

可以改成 long long sq = x * x; 或者double sq = pow(5, 2),就没那么多破事

经验:一开始就应该写多个程序测试下,1分钟的事,浪费了半小时观察,观察半天也没发现问题

Ac代码

#include<iostream>
#include<cmath> //pow()
using namespace std;

int judge(long long x)
{
    long long sq = x * x;
    while(x) {
        if(x % 10 != sq % 10)
            return false;
        x /= 10;
        sq /= 10;
    }
    return true;
}

int main()
{
    long long square, n;
    cin>>n;
    for(int i = 1; i <= n; ++i)
        if(judge(i)) cout<<i<<" ";
    return 0;
}
100000
1 5 6 25 76 376 625 9376 90625

十,素数回文数的个数

P1061 - 素数回文数的个数 - New Online Judge (ecustacm.cn) 

 

考虑写两个函数,一个判断素数prime(),一个判断回文repeat()

第一次,测试样例输出了2,于是,我用3分钟分别单独拿出两个函数测试,解决了

新技巧:重新写个程序测试函数

#include<iostream>
using namespace std;
int prime(int x) //判断素数
{
    if(x == 2) return true;
    for(int i = 2; i * i <= x; ++i)
        if(x % i == 0)
            return false;
    return true;
}
int repeat(int x)
{
    int y = x, z = 0;
    while(y) {
        z *= 10;
        z += y % 10;
        y /= 10;
    }
    if(z == x) return true;
    else return false;
}
int main()
{
    int m, n, ans = 0;
    cin>>m>>n;
    for(int i = m; i <= n; ++i)
        if(prime(i) && repeat(i))
            ans++;
    cout<<ans;
    return 0;
}

总结

1,出现bug或者输出错误答案时,不妨花2~3分钟写个新的程序进行测试,花费时间少不说,效率还高 

2,字符串相关函数掌握不熟练,比如strcmp, strcpy, strlen, memset, memcpy 

3,常犯错误:ans放在循环外,导致不断累积/累加,最终只有第一组输出正确 

4,遇到禁止结尾输出空格的题,可用数组保存答案,最后一个答案时,if判断不输出空格 

5,注意数组超限或者范围不对,比如矩阵顺逆时针旋转90° 

6,草稿纸上梳理思路是个好习惯 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/179356.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Mybatis-Plus 多记录操作与逻辑删除

目录 多记录操作 逻辑删除 问题引入 所以对于删除操作业务问题来说有: 实现步骤 逻辑删除&#xff0c;对查询有没有影响呢? 如果还是想把已经删除的数据都查询出来该如何实现? 多记录操作 程序设计出来一个个删除的话还是比较慢和费事的&#xff0c;所以一般会给用户一…

OpenMP Parallel Construct 实现原理与源码分析

OpenMP Parallel Construct 实现原理与源码分析 前言 在本篇文章当中我们将主要分析 OpenMP 当中的 parallel construct 具体时如何实现的&#xff0c;以及这个 construct 调用了哪些运行时库函数&#xff0c;并且详细分析这期间的参数传递&#xff01; Parallel 分析——编…

逆序遍历List集合

1 问题手写一个程序&#xff0c;完成List集合对象的逆序遍历2 方法创建List接口的多态对象向创建好list集合添加元素使用hasPrevious方法。import java.util.ArrayList;import java.util.List;import java.util.ListIterator;public class TestList { public static void ma…

如何好好说话第11章 攀登抽象之梯

在心里面放一把抽象之梯我们要时刻去概括。从更宏观的角度去理解我们当前所处的事情。抽上之梯的这个概念&#xff0c;在写作教材中常常出现。他指引我们写作的时候&#xff0c;不要站在梯子的中间。要么具体详实&#xff0c;要么抽象而精简短小。为什么不要站在梯子中间呢&…

蓝桥杯 stm32 MCP4017

本文代码使用 HAL 库。 文章目录前言一、MCP4017 的重要特性二、MCP4017 计算 RBW 阻值三、MCP4017 地址四、MCP4017 读写函数五、CubeMX 创建工程 &#xff08;利用 ADC 测量 MCP4017 电压&#xff09;、对应代码&#xff1a;总结前言 一、MCP4017 的重要特性 蓝桥杯 板子上…

冯诺依曼体系结构及操作系统(OS)的简单认识

文章目录冯诺依曼体系结构操作系统&#xff08;Operator System&#xff09;冯诺依曼体系结构 冯诺依曼结构也称普林斯顿结构&#xff0c;是一种将程序指令存储器和数据存储器合并在一起的存储结构。数学家冯诺依曼提出了计算机制造的三个基本原则&#xff0c;即采用二进制逻辑…

虚拟机的介绍及安装

文章目录虚拟机介绍VMware WorkStation安装在VMware上安装Linux远程连接Linux系统虚拟机介绍 通过虚拟化技术&#xff0c;在电脑内&#xff0c;虚拟出计算机硬件&#xff0c;并给虚拟的硬件安装操作系统&#xff0c;即可得到一台虚拟的电脑&#xff0c;称之为虚拟机。 VMware…

Ubuntu安装wordpress

这里写自定义目录标题开始环境安装打开参考链接开始 环境 这里安装的php是7.4版本&#xff0c; apt install apache2 php mariadb-server apt install php7.4-mysql php-dev记得需要单独安装php7.4-mysql&#xff0c;不然可能会报错连接数据库出错&#xff0c;中电是wp_chec…

(机械师T90外接显卡GTX-1080)Win10笔记本通过M.2接口外接独立显卡+解决错误代码43

文章目录前言一、硬件清单二、硬件安装1.插入转接卡2.显卡安装3.接入电源4.连接显示器三、驱动安装&#xff08;重点&#xff09;1.禁用笔记本独显2.卸载驱动3.安装新驱动4.解决错误代码43外接显卡使用体验前言 据外接显卡成功也快有一个月了&#xff0c;期间畅玩了刺客信条奥…

【C进阶】程序环境和预处理

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C语言进阶 ⭐代码仓库&#xff1a;C Advanced 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们…

新年快到了,如何运用Python实现春联

这篇博文可能写晚了,现在已经是初五了,哈哈!小编也是最近才想到的,看到老爸去年二十九(或者三十)在写春联,当时觉得他写的好慢啊!(不过让我来写,肯定不行!),于是萌生了用小编所学知识实现春联,只不过家里面没有打印机,不然代码写完之后,之后直接用打印机打印出来就…

【汤姆猫的实现 Objective-C语言】

一、实现之后的效果 1.左边3个按钮,分别是 1)点击之后,汤姆猫掏出一只白色的小鸟,刚要吃,它飞走了, 2)汤姆猫放屁 3)汤姆猫喝牛奶, 右边3个按钮,分别是 1)汤姆猫用爪子把屏幕抓出3个道子, 2)汤姆猫用披萨饼砸屏幕, 3)汤姆猫拿出两个锣,对着一敲, 2.这…

Java 23种设计模式(7.结构型模式-装饰者模式)

结构型模式-装饰者模式 代码分析 类图 代码 abstract class Component {abstract void operation(); }public class ConcreteComponent extends Component {void operation() {System.out.println("具体类");} }public class Decorator extends Component{private …

为向IPv6过渡的组织发布安全指南

美国国家安全局 (NSA) 已发布指南&#xff0c;以帮助国防部 (DoD) 和其他系统管理员识别和减轻与过渡到互联网协议版本 6 (IPv6) 相关的网络风险。 IPv6 由互联网工程任务组 (IETF) 开发&#xff0c;是用于识别和定位系统并在互联网上路由流量的协议的最新版本&#xff0c;提供…

统计学习方法 学习笔记(5)决策树

决策树5.1.决策树模型与学习5.2.特征选择5.3.决策树的生成5.4.决策树的剪枝5.5.CART算法决策树基本概述&#xff1a; 算法类别&#xff1a;一种基本的分类和回归方法&#xff1b;基本结构&#xff1a;呈现树形结构&#xff0c;在分类问题中表示基于特征对实例进行分类的过程。…

云原生之使用docker部署Postgresql数据库

云原生之使用docker部署Postgresql数据库一、Postgresql介绍1.PostgreSQL简介2.PostgreSQL的特点二、检查本地docker环境1.检查系统版本2.检查docker版本3.检查docker状态三、下载Postgresql镜像四、部署Postgresql数据库1.创建Postgresql容器2.查看Postgresql容器状态3.查看Po…

通配符的匹配很全面, 但无法找到元素 ‘context:component-scan‘ 的声明。

HTTP状态 500 - 内部服务器错误 类型 异常报告 消息 Servlet[springMVC]的Servlet.init&#xff08;&#xff09;引发异常 描述 服务器遇到一个意外的情况&#xff0c;阻止它完成请求。 例外情况 javax.servlet.ServletException: Servlet[springMVC]的Servlet.init&#x…

一文看懂Linux基础

文章目录什么是Linux操作系统window和linux的对比快照的拍摄Linux的文件结构kali Linux的简单介绍基础命令vim命令文件权限kali的常见工具查看命令1.查看操作&#xff1a;2.删除操作&#xff1a;3.复制操作&#xff1a;4.移动操作&#xff1a;5.重命名操作&#xff1a;7.上传文…

【时间复杂度和空间复杂度】

1.时间复杂度时间复杂度的定义&#xff1a;在计算机科学中&#xff0c;算法的时间复杂度是一个数学函数&#xff0c;它定量描述了该算法的额外运行时间。一个算法执行所耗费的时间&#xff0c;从理论上说&#xff0c;是不能算出来的&#xff0c;只有你把你的程序放在机器上跑起…

Linux系统用户和权限

文章目录root用户用户、用户组管理查看权限控制修改权限控制 - chmod修改权限控制 - chownroot用户 无论是Windows、MacOS、Linux均采用多用户的管理模式进行权限管理。 在Linux系统中&#xff0c;拥有最大权限的账户名为&#xff1a;root&#xff08;超级管理员&#xff09; …