算法修炼之练气篇——练气九层

news2024/11/23 17:03:42

博主:命运之光

专栏:算法修炼之练气篇

前言:每天练习五道题,炼气篇大概会练习200道题左右,题目有C语言网上的题,也有洛谷上面的题,题目简单适合新手入门。(代码都是命运之光自己写的,练完这200多道题就考了今年第十四届的B组蓝桥杯C/C++获得了省一,后面还会更新“算法修炼之筑基篇”里面包括了省赛到国赛这一个月训练的刷奖计划,大概有40道左右,感兴趣的话可以关注一下命运之光)

目录

题目 2656: 蓝桥杯2022年第十三届省赛真题-刷题统计

题目描述

输入格式

输出格式

样例输入

样例输出

提示

题目 2657: 蓝桥杯2022年第十三届省赛真题-修剪灌木

题目描述

输入格式

输出格式

样例输入

样例输出

提示

题目 1999: 回文判断

题目描述

输入格式

输出格式

样例输入

样例输出

题目 1200: 回文串

题目描述

输入格式

输出格式

样例输入

样例输出

反向扫描——尺取法

题目 1461: 蓝桥杯基础练习VIP-FJ的字符串

题目描述

输入格式

输出格式

样例输入

样例输出

🍓🍓今日份修炼结束,再接再厉!!!

题目 2656: 蓝桥杯2022年第十三届省赛真题-刷题统计

题目描述

小明决定从下周一开始努力刷题准备蓝桥杯竞赛。他计划周一至周五每天做 a 道题目,周六和周日每天做 b 道题目。请你帮小明计算,按照计划他将在第几天实现做题数大于等于 n 题?

输入格式

输入一行包含三个整数 a, b 和 n.

输出格式

输出一个整数代表天数。

样例输入

10 20 99

样例输出

8

提示

对于 50% 的评测用例,1 ≤ a, b, n ≤ 106 . 对于 100% 的评测用例,1 ≤ a, b, n ≤ 1018 .

从错误到正确详细带你走一遍!

思路一:暴力破解(时间超限71)

#include <stdio.h>
int a,b,n,sum=0,cout1=0,day=1;
int main()
{
    scanf("%d %d %d",&a,&b,&n);
    while(sum<n)
    {
        cout1++;
        if(day==8)
        {
            day=1;
        }
        if(day<=5)
        {
            sum=sum+a;
        }
        else
        {
            sum=sum+b;
        }
        day++;
    }
    printf("%d\n",cout1);
    return 0;
}

思路二:在以上算法上进行优化降低算法复杂度(时间超限80)

#include <stdio.h>
long long a,b,n,cout1=0,day=1;
int main()
{
    scanf("%lld %lld %lld",&a,&b,&n);
    while(n>=0)
    {
        cout1++;
        if(day==8)
        {
            day=1;
        }
        if(day<=5)
        {
            n=n-a;
        }
        else
        {
            n=n-b;
        }
        day++;
    }
    printf("%lld\n",cout1);
    return 0;
}

先总结一下:我发现,通过加减这样改算法复杂度,复杂度能降低但降低的非常非常小,所以下来我将用乘除的方式改进复杂度问题,让时间不会超限。

思路三:依旧暴力破解,但我用乘除的方式降低复杂度

改进算法如下:

  long long temp=n;
    if(temp>=(5*a+2*b))
    {
        while(n>=(5*a+2*b))
        {
            flag=n/(5*a+2*b)*7;
            n=n-flag*(5*a+2*b)/7;
               sum=flag;
        }
    }

运行结果(这就很迷~🍓)

#include<stdio.h>
long long a,b,n,cout1=0,day=1,flag,temp,sum=0;
int main()
{
    scanf("%lld %lld %lld",&a,&b,&n);
    temp=n;
    if(temp>=(5*a+2*b))
    {
        while(n>=(5*a+2*b))
        {
            flag=n/(5*a+2*b)*7;
            n=n-flag*(5*a+2*b)/7;
               sum=flag;
        }
    }
    while(n>=0)
    {
        sum++;
        if(day==8)
        {
            day=1;
        }
        if(day<=5)
        {
            n=n-a;
        }
        else
        {
            n=n-b;
        }
        day++;
    }
    printf("%lld",sum);
    return 0;
}

无奈~进行调试

输入

10 20 30

正确输出应该是

3

我的输出是

4

错误点分析

改错

//while(n>=0)错了,将等号去掉
while(n=0)

最终代码+运行结果

#include <stdio.h>
long long a,b,n,cout1=0,day=1,flag,temp,sum=0;
int main()
{
    scanf("%lld %lld %lld",&a,&b,&n);
    temp=n;
    if(temp>=(5*a+2*b))
    {
        while(n>=(5*a+2*b))
        {
            flag=n/(5*a+2*b)*7;
            n=n-flag*(5*a+2*b)/7;
               sum=flag;
        }
    }
    while(n>0)
    {
        sum++;
        if(day==8)
        {
            day=1;
        }
        if(day<=5)
        {
            n=n-a;
        }
        else
        {
            n=n-b;
        }
        day++;
    }
    printf("%lld",sum);
    return 0;
}

题目 2657: 蓝桥杯2022年第十三届省赛真题-修剪灌木

题目描述

爱丽丝要完成一项修剪灌木的工作。有 N 棵灌木整齐的从左到右排成一排。爱丽丝在每天傍晚会修剪一棵灌木,让灌木的高度变为 0 厘米。爱丽丝修剪灌木的顺序是从最左侧的灌木开始,每天向右修剪一棵灌木。当修剪了最右侧的灌木后,她会调转方向,下一天开始向左修剪灌木。直到修剪了最左的灌木后再次调转方向。然后如此循环往复。灌木每天从早上到傍晚会长高 1 厘米,而其余时间不会长高。在第一天的早晨,所有灌木的高度都是 0 厘米。爱丽丝想知道每棵灌木最高长到多高。

输入格式

一个正整数 N ,含义如题面所述。

输出格式

输出 N 行,每行一个整数,第i行表示从左到右第 i 棵树最高能长到多高。

样例输入

3

样例输出

4 2 4

提示

对于 30% 的数据,N ≤ 10. 对于 100% 的数据,1 < N ≤ 10000.

理解题意!!找到规律!!以下是找到的规律!!(可参考)

解题思路:

这道题主要是找规律,题意读懂后找到规律,把所找的规律用算法表示出来。

注:

找到规律后实现不止一种方法,下面这个是直接打出来的,也可以想一想更简单,代码量更少的实现方法,主要我认为的是最快想到的就是最好的,没必要太过苛求简易。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,i;
    cin>>n;
    i=2*n-2;
    if(n==1)//如果输入是1
    {
        printf("1\n");//直接输出1
        return 0;
    }
    while(i>n)//循环打印从高到低
    {
        printf("%d\n",i);//例如:n=5时,输出8,6
        i=i-2;
    }
    if(n%2==0)//判断是否为偶数
    {
        printf("%d\n",i);/*例如:n=6时,多输出一次6,使其满足答案的10 8 6 6 8 10*/
    }
    while(i<=2*n-2)//循环打印从低到高
    {
        printf("%d\n",i);//例如:n=5时,输出4,6,8
        i=i+2;
    }
    return 0;
}

题目 1999: 回文判断

题目描述

若一个正整数从左向右读与从右向左读都一样,我们就将其称之为回文数(例如12321、44、3都是回文数)。输入一个正整数,判断它是否是回文数,是则输出YES,否则输出NO。(提示:以字符串形式读取输入的整数)

输入格式

正整数

输出格式

YES或NO

样例输入

2332

样例输出

YES

解题思路:设反向扫描双指针为i和j,如果s[i]和s[j]相同,则执行i++和j—;如果s[i]和s[j]不同,那么或者删除s[i],或者删除s[j],看剩下的字符串是否是回文串。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin>>s;//读一个字符串
    bool ans=true;
    int i=0,j=s.size()-1;//双指针
    while(i<j)
    {
        if(s[i]!=s[j])
        {
            ans=false;
            break;
        }
        i++;
        j--;//移动双指针
    }
    if(ans)
    {
        cout<<"YES"<<endl;
    }
    else
    {
        cout<<"NO"<<endl;
    }
    return 0;
}

题目 1200: 回文串

题目描述

回文串是从左到右或者从右到左读起来都一样的字符串,试编程判别一个字符串是否为回文串。

输入格式

输入一个字符串。串长度<255.

输出格式

判别输入的字符串是否为回文串,是输出"Y",否则输出"N"。

样例输入

abcba

样例输出

Y

反向扫描——尺取法

反向扫描:i、j 方向相反,i 从头到尾,j 从尾到头,在中间相会。也可以把反向扫描的 i、j 指针称为「左右指针」

注意:用尺取法的最关键之处在于,两个指针 i、j在总体上只能有一个循环,例如:i 循环一遍,对应的 j 只能跟随 i 循环一遍。这样才能实现计算复杂度从 O(n^2)到 O(n)的优化。

解题思路:设反向扫描双指针为i和j,如果s[i]和s[j]相同,则执行i++和j—;如果s[i]和s[j]不同,那么或者删除s[i],或者删除s[j],看剩下的字符串是否是回文串。

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s;
    cin>>s;//读一个字符串
    bool ans=true;
    int i=0,j=s.size()-1;//双指针
    while(i<j)
    {
        if(s[i]!=s[j])
        {
            ans=false;
            break;
        }
        i++;
        j--;//移动双指针
    }
    if(ans)
    {
        cout<<"Y"<<endl;
    }
    else
    {
        cout<<"N"<<endl;
    }
    return 0;
}

题目 1461: 蓝桥杯基础练习VIP-FJ的字符串

题目描述

FJ在沙盘上写了这样一些字符串:
A1 = “A”
A2 = “ABA”
A3 = “ABACABA”
A4 = “ABACABADABACABA”
… …
你能找出其中的规律并写所有的数列AN吗?

输入格式

仅有一个数:N ≤ 26。

输出格式

请输出相应的字符串AN,以一个换行符结束。输出中不得含有多余的空格或换行、回车符。

样例输入

3

样例输出

ABACABA

#include<bits/stdc++.h>
using namespace std;
int main()
{
    string s1="A",s2;
    int n,k=1;
    scanf("%d",&n);
    for(int i=2;i<=n;i++)
    {
        s2=65+k;
        s1=s1+s2+s1;
        k++;
    }
    printf("%s",s1.c_str());/*string类型用printf输出时%s,后用.c_str()否则会报错*/
    return 0;
}

🍓🍓今日份修炼结束,再接再厉!!!

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

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

相关文章

hexo + github 创建个人博客网站

环境准备 nodejs 和 npmgit 安装hexo hexo 是一个静态博客生成网站&#xff0c;可以快速制作自己的博客网站并部署 安装hexo npm install hexo-cli -g 创建项目 hexo init 本地预览 hexo s 部署到github page 新建仓库 创建一个名为[用户名].github.io的仓库 下载自动部署插…

三本毕业,银行外包测试工作 4 个月有余.....

本人普通三本本科毕业 4 年&#xff0c;目前是在广州工作&#xff0c;是一家大型的人力外包公司外包到银行的测试人员&#xff0c;这可能也是长期在各大招聘软件上最积极的招聘岗位。 从入职到现在已经有四个月了&#xff0c;也大概了解了外包的主要工作情况&#xff0c;也有了…

Android 性能优化的真谛,你领悟到了吗?

当今移动应用已经成为人们生活中不可或缺的一部分&#xff0c;而Android平台也是最受欢迎的移动操作系统之一。但是&#xff0c;由于Android平台的开放性和多样性&#xff0c;开发者需要特别注意应用的性能问题。本文将介绍一些Android性能优化的方法&#xff0c;帮助开发者提高…

六年间全球十大勒索攻击事件盘点:没有底线全是算计

自2017年WannaCry席卷全球以来&#xff0c;勒索软件攻击不断演变&#xff0c;并逐渐形成产业化&#xff0c;其攻击规模、影响及破坏效果进一步扩大&#xff0c;已经对全球制造、金融、能源、医疗、政府组织等关键领域造成严重影响&#xff0c;在某些事件中&#xff0c;攻击者挟…

家用洗地机哪种好?入门级智能洗地机推荐

传统的清洁方式不仅费时费力&#xff0c;而且并不一定能够完全清除地面污渍&#xff0c;而洗地机采用的高效吸力和滚刷设计可以快速、彻底地清洁地面&#xff0c;让您轻松应对日常清洁问题。洗地机是一种非常经济实用的清洁设备&#xff0c;它能够深入清洁地面&#xff0c;有效…

深度指南:WhatsApp广播vs WhatsApp群组

WhatsApp是全球使用最广泛的通信应用程序之一。您可以在您的应用程序上找到WhatsApp群组和WhatsApp广播功能&#xff0c;据我所知&#xff0c;SaleSmartly&#xff08;ss客服&#xff09;支持集成WhatsApp并实现群组与广播功能。那么&#xff0c;二者之间有什么区别&#xff1f…

Windows下git和github的使用

介绍windows下的git和GitHub使用。 一、注册gihub账号 github官网&#xff1a;https://github.com 自行创建即可。 登录&#xff0c;create repository新建仓库一个测试库readme&#xff0c;创建完成。 二、git的安装 git官方网站&#xff1a;https://git-scm.com/ 选择Wi…

C#中如何使用ObjectPool来提高StringBuilder的性能

在C#中我们知道使用StringBuilder能提高大量字符串拼接的效率&#xff0c;其实StringBuilder的效率也可以提升&#xff0c;那就是使用ObjectPool。以下介绍怎么使用ObjectPool提高StringBuilder的性能。一、简介 C# ObjectPool类是一个内置的类库&#xff0c;用于实现对象…

Elasticsearch:如何使用自定义的证书安装 Elastic Stack 8.x

在我之前的文章 “如何在 Linux&#xff0c;MacOS 及 Windows 上进行安装 Elasticsearch”&#xff0c;我详细描述了如何在各个平台中安装 Elastic Stack 8.x。在其中的文章中&#xff0c;我们大多采用默认的证书来安装 Elasticsearch。在今天的文章中&#xff0c;我们用自己创…

异常检测经典作:基于teacher-students的无监督异常检测

来源&#xff1a;投稿 作者&#xff1a;Mr.Eraser 编辑&#xff1a;学姐 论文链接&#xff1a;https://arxiv.org/pdf/1911.02357.pdf 贡献 提出了一种基于师生学习的无监督异常检测新框架&#xff1a;来自预训练教师网络的局部描述符用作学生集合的代理标签。模型能够在大型…

<<和>>操作符、取地址重载、const关键字

文章目录 自定义类型<<和>>重载const关键字取地址重载&#xff08;类的默认构造函数&#xff09; 自定义类型<<和>>重载 在内置类型中&#xff0c;<<和>>可以自动识别 在自定义类型冲&#xff0c;运算符重载&#xff0c;<<和>&…

maven从入门到精通 第六章 在Maven中项目导入、生命周期、插件、目标、仓库

这里写自定义目录标题 一 工程与模块导入1 工程导入的方法1.1 版本控制系统1.2 来自工程目录1.2.1 直接导入工程文件1.2.2直接解压 2 模块导入 二 生命周期的基本概念1 生命周期存在的意义 三 插件和目标四 仓库 一 工程与模块导入 1 工程导入的方法 1.1 版本控制系统 通常使…

有赞一面:亿级用户DAU日活统计,有几种方案?

说在前面 在40岁老架构师 尼恩的读者社区(50)中&#xff0c;最近有小伙伴拿到了一线互联网企业如极兔、有赞、希音、百度、网易、滴滴的面试资格&#xff0c;遇到一几个很重要的面试题&#xff1a; (1) 亿级用户场景&#xff0c;如何高性能统计日活&#xff1f; (2) 如何实现亿…

九、Ribbon负载均衡

目录 一、Ribbon负载均衡策略&#xff08;常用7种&#xff09;&#xff1a; 详细介绍&#xff1a; 1、轮询策略&#xff1a; RoundRibbonRule&#xff08;Ribbon默认策略&#xff09; 2、重试策略&#xff1a;RetryRule 3、加权响应时间策略&#xff1a;WeightedResponseT…

【模拟电子技术】常用半导体器件——本征半导体

&#x1f347;&#x1f347;只有强大的意志&#xff0c;才能成就最艰难的选择。 ——CSDN厉昱辰 目录 &#x1f34d;&#x1f34d;一、半导体 &#x1f34d;&#x1f34d;二、本征半导体的晶体结构 &#x1f34d;&#x1f34d; 三、本征半导体中的两种载流子 &#x1f34d…

数字图像处理基础知识(自救指南)

概念 本部分多来自课件&#xff0c;见水印 数字图像处理的目的 提高图像的视感质量&#xff0c;以达到赏心悦目的目的。提取图像中所包含的某些特征或特殊信息&#xff0c;主要用于计算机分析&#xff0c;经常用作模式识别、计算机视觉的预处理。对图像数据进行变换、编码和压…

炫云为什么要采用让人看不懂的GHZ计费?

很多人看到炫云GHZ计费都表示看不懂&#xff0c;觉得麻烦&#xff0c;没有按核数、按线程或者按分钟计费简单易懂&#xff0c;甚至还被某些同行经常拿来攻击。哪为什么炫云还坚持用GHZ计费呢&#xff1f;哪是因为使用GHZ计费更加公平、透明&#xff0c;且具有硬件无关性。今天就…

10个适合Web开发的最佳CSS生成器工具

在写CSS的时候&#xff0c;我们可以手写CSS&#xff0c;也可以直接使用一些CSS生成器来完成&#xff0c;今天我就跟大家分享10个好用的CSS生成器工具&#xff0c;帮助你提升工作效率。 1.纯CSS条纹生成器 网址&#xff1a;https://stripesgenerator.com 没有 Flash&#xff0…

QT多线程基础

文章目录 前言一、多线程概念介绍二、创建一个线程三、start和terminate函数四、如何不使用terminate函数终止线程总结 前言 本篇文章来讲解一下QT中的多线程使用方法。 其实线程这个概念对于我们来说并不陌生&#xff0c;main函数在多线程中一般就被称为主线程。 在QT中&am…

《计算机网络—自顶向下方法》 第四章Wireshark实验:TCP 协议分析

在因特网协议族&#xff08;Internet Protocol Suite&#xff09;中&#xff0c;TCP 层是位于 IP 层之上&#xff0c;应用层之下的中间层。不同主机的应用层之间经常需要可靠的、像管道一样的连接&#xff0c;但是 IP 层不提供这样的流机制&#xff0c;而是提供不可靠的包交换。…