蓝桥杯第八届c++大学B组详解

目录

1.购物单

2.等差素数列

3.承压计算

4.方格分割

5.日期问题

6.包子凑数

7.全球变暖

8.k倍区间


1.购物单

 题目解析:就是将折扣字符串转化为数字,进行相加求和。

 

#include<iostream>
#include<string>
#include<cmath>
using namespace std;

int main()
{
      double sum = 0.0;
      while(1)
      {
         double price;
         string ignore;
         string discount;
         double dis = 0.0;
         cin >> price >> ignore >> discount;
         if(ignore == "0") break;

         if(discount == "半价") discount = "5折";
         //截取字符
         discount = discount.substr(0, discount.size() - 2);
         for(int i = 0; i < discount.size(); i++)
         {
             dis += (discount[i] - '0') * pow(10, -i - 1);
         }
         sum += dis * price;
      }

      //面额刚好100整除
      if((int)sum % 100 == 0)
         cout << (int)sum << endl;
      else
      {
          cout << (int)sum / 100 * 100 + 100 << endl;
      }
      return 0;
}

 这题目数据太长了,输入很麻烦。那么就不讲武德。因为上面代码没错但是运行超级麻烦。这种简单题目直接不讲武德。

#include <iostream>
using namespace std;
int main()
{
  // 请在此输入您的代码
  double sum = 180.90*0.88+10.25*0.65+56.14*0.9+104.65*0.9+100.30*0.88+297.15*0.5+26.75*0.65+130.62*0.5+240.28*0.58+270.62*0.8+115.87*0.88+247.34*0.95+73.21*0.9+101.00*0.5+79.54*0.5+278.44*0.7+199.26*0.5+12.97*0.9+166.30*0.78+125.50*0.58+84.98*0.9+113.35*0.68+166.57*0.5+42.56*0.9+81.90*0.95+131.78*0.8+255.89*0.78+109.17*0.9+146.69*0.68+139.33*0.65+141.16*0.78+154.74*0.8+59.42*0.8+85.44*0.68+293.70*0.88+261.79*0.65+11.30*0.88+268.27*0.58+128.29*0.88+251.03*0.8+208.39*0.75+128.88*0.75+62.06*0.9+225.87*0.75+12.89*0.75+34.28*0.75+62.16*0.58+129.12*0.5+218.37*0.5+289.69*0.8;
  if((int)sum % 100 == 0)
    cout << (int)sum;
  else
  {
      int a = (int)(sum+100)/100*100;
      cout << a << endl;
  }
  return 0;
}

2.等差素数列

 首先将素数全部放到数组当中,然后再用set进行查看是否是素数,f函数用首先确定首项,在确定公差,最后判断是否每项是否是素数,看在set中可不可以找到。

#include <iostream>
#include<vector>
#include<set>
using namespace std;

vector<int> a(5000);
set<int> g;

bool isprime(int x)
{
    for(int i = 2; i < x / 2; i++)
    {
       if(x % i == 0)
          return false;
    }
    return true;
}

int f(vector<int> a, int n)
{
     for(int i = 0; i < n; i++)//算首项
     {
         int first = a[i];
         for(int d = 1; d < a[n-1] - first; d++)
         {
             int m = first;
             for(int j = 1; j < 10; j++)
             {
                   m += d;
                   //求和不是素数
                   if(g.find(m) == g.end())
                       break;
                   if(j == 9)
                       return d;
             }
         }
     }
}

int main()
{
    a[0] = 2, a[1] = 3;
    g.insert(2);
    g.insert(3);
    int index = 2;
    int t = 5;
    while(index < 5000)
    {
        //将2-5000的素数都放到set;
        if(isprime(t))
        {
            a[index++] = t;
            g.insert(t); 
        }
        t++;
    }

    //f返回最小公差;
    cout << f(a, 5000) << endl;
    return 0;
}

3.承压计算

题目解析:这个题目看懂题目意思就已经够烦了,就是将上面的数平均分给下面的数,因为最小重量是2086458231,这个垃圾数字处理。

#include <iostream>
#include<algorithm>
using namespace std;

long long a[30][30];

int main()
{
    long long factor = 1;
    //2的30次方。是为了避免小数。
    for(int i = 0; i < 30; i++)
    {
        factor = factor * 2;
    }
    
    for(int i = 0; i < 29; i++)
    {
        for(int j = 0; j <= i; j++)
        {
            long long m = 0;
            cin >> m;
            a[i][j] = m * factor;
        } 
    }
    
    for(int i = 0; i < 29; i++)
    {
      for(int j = 0; j <= i; j++)
      {
        long long half = a[i][j] / 2;
        a[i + 1][j] += half;
        a[i + 1][j + 1] += half;
      }
    }
    //最后一行排序
    sort(a[29], a[29] + 30);
    cout  << a[29][29] / 2 << endl;
    return 0;
}

4.方格分割

 题目解析:本质是递归回溯深搜算法,找规律,是不是方格都是中心对称的,那么递归起点就在中心点,进行上下左右的排查,最后还要回溯,还有因为题目要求是中心对称也是一种方法,所以方法数最后要除以4.

#include <iostream>
using namespace std;

//上下左右方位
int d[][2]  = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
int vis[7][7];
int ret = 0;

void dfs(int x, int y)
{
    //递归出口
    if(x == 0 || x == 6 || y == 0 || y == 6)
    {
         ret++;
         return;
    }

    vis[x][y] = 1;
    vis[6 - x][6 - y] = 1;

    //上下左右
    for(int i = 0; i < 4; i++)
    {
        int nx = x + d[i][0];
        int ny = y + d[i][1];

        //边界处理
        if(nx > 6 || nx < 0 || ny > 6 || ny < 0)
              continue;
        if(!vis[nx][ny])
        {
           dfs(nx, ny);
        }
    }

    //回溯
    vis[x][y] = 0;
    vis[6 - x][6 - y] = 0;
}


int main()
{
    dfs(3, 3);
    //因为旋转对称是同一种分隔方式
    cout << ret / 4 << endl;
    return 0;
}

5.日期问题

 题目解析: 细节很多,逻辑很缜密,自己代码走读一下,就可以找到细节。

#include <iostream>
#include <string>
#include<sstream>
#include<set>
using namespace std;

bool isleap(int a)
{
   if((a % 4 == 0 || a % 100 != 0) && a % 400 == 0)
      return true;
   else
      return false;
}

void is(int n, string& s)
{
    stringstream ss;
    ss << n;
    ss >> s;
}

string f(int year, int month, int day)
{
    if(year >= 0 && year <= 59) year += 2000;
    if(year >= 60 && year <= 99) year += 1900;

    if(month < 1 || month > 13) return " ";
    if(day < 1 || day > 31) return " ";
    //计算闰年
    bool _isleap = isleap(year);

    switch(month)
    {
        //考虑闰月
        case 2:
              if(_isleap && day > 29) return " ";
              if(!_isleap && day > 28) return " ";
              break;
        case 4:
              if(day > 30)  return " ";
                break;
        case 6:
              if(day > 30)  return " ";
                break;
        case 9:
             if(day > 30)  return " ";
              break;
        case 11:
             if(day > 30)  return " ";
              break;
        default:
              break;
    }
    
    //将数字变会字符串
    string _a, _b, _c;
    is(year, _a);
    is(month, _b);
    is(day, _c);

    //处理前导0;
    if(_b.size() == 1)  _b = '0' + _b;
    if(_c.size() == 1)  _c = '0' + _c;

    return _a + "-" + _b + "-" + _c;
}

int main()
{
    string in;
    cin >> in;

    //将字符串转化为数字;
    int a, b, c;
    a = (in[0] - '0') * 10 + (in[1] - '0') ;
    b = (in[3] - '0') * 10 + (in[4] - '0') ;
    c = (in[6] - '0') * 10 + (in[7] - '0') ;

    //年月日
    string case1 = f(a, b, c);
    //月日年
    string case2 = f(b, c, a);
    //日月年
    string case3 = f(c, b, a);

    set<string> ans;
    if(case1 != " ") ans.insert(case1);
    if(case2 != " ") ans.insert(case2);
    if(case3 != " ") ans.insert(case3);

    for(set<string>::iterator it = ans.begin(); it != ans.end(); it++)
    {
        cout << *it << endl;
    }
    
    return 0;
}

 6.包子凑数

 题目解析:就是找钱的变形,使用动态规划。

#include <iostream>
using namespace std;

//dp[i]表示凑不到i种蒸笼凑不齐的方案数
int main()
{
    int n;
    cin >> n;
    int dp[20000] = {0};
    int a[101];
    for(int i = 0; i < n; i++)
    {
         cin >> a[i];
    }

    dp[0] = 1;
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < 10001; j++)//10001是最大凑包子数目;
        {
            if(dp[j])
            {
               dp[j + a[i]] = 1; //dp[4] = 1; dp[5] = 1
            }
        }
    }

    int flag = 0, num = 0;
    for(int i = a[n-1]; i < 10001; i++)
    {
        if(dp[i] == 1)
           num++;
        if(dp[i] == 0)
           num = 0;
        if(num == a[0])
        {
             flag = 1;
             break;
        }
    }

    if(flag == 0)
       cout << "INF" << endl;
    else
    {
       num = 0;
       for(int i = 0; i < 10001; i++)
       {
           if(dp[i] == 0)
              num++;
       }
       cout << num << endl;
    }
       
    return 0;
}

7.全球变暖

 题目解析:递归深搜fullfill问题,

#include <iostream>
using namespace std;

#define N 1000
int ret = 0;
int dx[] = {0, 0, 1, -1};
int dy[] = {1, -1, 0, 0};
char IslandSea[N][N];

void dfs(char IslandSea[N][N], int x, int y)
{
      for(int k = 0; k < 4; k++)
      {
         int xx = dx[k] + x;
         int yy = dy[k] + y;
         if(xx >= 0 && xx < 7 && yy >= 0 && yy < 7)
         {
             if(IslandSea[xx][yy] == '.')
                 return;    
         }
      }
      ret++;
}

int main()
{
    int n;
    cin >> n;
    for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
           cin >> IslandSea[i][j];
        }
    }
    
     for(int i = 0; i < n; i++)
    {
        for(int j = 0; j < n; j++)
        {
            if(IslandSea[i][j] == '#')
            {
                dfs(IslandSea, i, j);
            }
        }
    }
    
    
    cout << ret << endl;
    return 0;
}

8.k倍区间

 题目解析:读清楚题目,本质就是前缀和。cnt用来记录余数个数,将任意两个相同的余数进行组合一定会得到一种区间。

 

#include <iostream>
using namespace std;
#include<map>

map<int, int> cnt;//存放余数
int a[100000];
int dp[100000];//前缀和

int main()
{
    int n, k;
    long long count = 0;
    cin >> n >> k;
    dp[0] = 0;
    cnt[0] = 1;

    for(int i = 1; i <= n; i++)
    {
         cin >> a[i];
         dp[i] = (dp[i - 1] + a[i] ) % k;//k的倍数
         cnt[dp[i]]++;//记录一下。cnt[0]为刚好被k整除的个数。
    }

    for(int i = 0; i < k; i++)
    {
         count += (long long) cnt[i] * (cnt[i] - 1) / 2;
    }

    cout << count << endl;
    return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ABC319 G - Counting Shortest Paths

解题思路 按照到的距离远近&#xff0c;进行分层为第一层分层步骤&#xff1a;用一个集合记录还未定层的点&#xff0c;用逐层确定对于当前点与其有连边的&#xff08;不是删边&#xff09;且还未确定的点&#xff0c;确定为的下一层&#xff0c;入队列没连边且还未确定的点&a…

适用于车载设备无钥匙进入系统汽车用晶振FA-238A

汽车用晶振FA-238A是一款适用于车载设备无钥匙进入系统的耐高温晶振。汽车用晶振FA-238A是爱普生推出一的款MHz表贴式晶体单元&#xff0c;具有很好的预率性能&#xff0c;符合AEC-0200标准&#xff0c;其封装尺寸仅为3.2x2.5x0.7mm&#xff0c;工作温度范围在-40℃~125℃之间&…

市场复盘总结 20240402

仅用于记录当天的市场情况&#xff0c;用于统计交易策略的适用情况&#xff0c;以便程序回测 短线核心&#xff1a;不参与任何级别的调整&#xff0c;采用龙空龙模式 一支股票 10%的时候可以操作&#xff0c; 90%的时间适合空仓等待 二进三&#xff1a; 进级率 50% 最常用的二…

最新版两款不同版SEO超级外链工具PHP源码

可根据个人感觉喜好自行任意选择不同版本使用&#xff08;版V1或版V2&#xff09; 请将zip文件全部解压缩即可访问&#xff01; 源码全部开源&#xff0c;支持上传二级目录访问 已更新增加大量高质量外链&#xff08;若需要增加修改其他外链请打开txt文件&#xff09;修复优…

探索牙科业务架构的优化与整合解决方案

在现代医疗领域中&#xff0c;牙科作为一个重要的分支&#xff0c;其业务架构和整体解决方案的优化与整合&#xff0c;对于提高诊疗效率、提升患者体验以及促进口腔健康水平具有重要意义。本文将深入探讨牙科业务架构的优化方向和整体解决方案&#xff0c;为牙科行业的发展提供…

基于SSM的“汽车销售分析与管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“汽车销售分析与管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SSM 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 销售经理系统首页图 客户管理图 车辆…

27.ReentrantLock

1.与synchronized不同点&#xff1a; 可中断可以设置超时时间可以设置公平锁&#xff0c;公平锁就是为了解决饥饿线程&#xff0c;让线程排队&#xff0c;先进先出&#xff0c;先来的线程先执行。支持多个条件变量 2.与synchronized相同点都支持锁的可重入。 基本格式&#…

js使用canvas实现画roi功能,并实现交集并集差集操作,附源码

效果概览 支持圆形&#xff0c;矩形&#xff0c;旋转矩形绘制&#xff0c;鼠标像素拾取&#xff0c;图片缩放&#xff0c;图片拖拽&#xff0c;像素测量&#xff0c;roi交集并集补集输出 TODO&#xff1a;实现自由路径绘制&#xff0c;与后台交互数据 实现原理 交集并集差集…

【HTML】标签学习(下.4)

&#xff08;Hello&#xff01;大家好哇&#xff0c;今天我们将继续学习HTML的相关知识&#xff0c;大家可以在评论区进行互动答疑哦~加油&#xff01;&#x1f495;&#xff09; &#xff08;续接【HTML】标签学习&#xff08;下.3&#xff09;&#xff09; 3.4.2 <label&g…

Java设计模式:代理模式的静态和动态之分(八)

码到三十五 &#xff1a; 个人主页 心中有诗画&#xff0c;指尖舞代码&#xff0c;目光览世界&#xff0c;步履越千山&#xff0c;人间尽值得 ! 在软件设计中&#xff0c;代理模式是一种常用的设计模式&#xff0c;它为我们提供了一种方式来控制对原始对象的访问。在Java中&a…

Python快速入门系列-9(Python项目实战)

第九章:Python项目实战 9.1 开发一个简单的Web应用9.1.1 项目概述9.1.2 环境准备9.1.3 项目结构9.1.4 代码实现9.1.4.1 创建数据库模型9.1.4.2 创建视图9.1.4.3 实用工具函数9.1.4.4 运行应用9.1.5 模板设计9.2 数据分析与可视化项目9.2.1 项目概述9.2.2 环境准备9.2.3 数据分…

vulnhub之devguru靶场提权过程(vulnhub打靶日记)

一、环境搭建 VM版本&#xff1a;17.5.1 build-23298084 攻击机&#xff1a;Kali2024&#xff08;下载地址&#xff1a;https://www.kali.org/&#xff09; 靶机&#xff1a;vulnhub靶场Devguru&#xff08;下载地址&#xff1a;https://www.vulnhub.com/entry/devguru-1,62…

探索网红系统功能菜单架构的设计与优化

随着社交媒体和数字化内容的普及&#xff0c;网红经济正在成为新兴的产业。在网红经济体系中&#xff0c;网红系统的功能菜单架构对于平台的用户体验和运营效率至关重要。本文将深入探讨网红系统功能菜单架构的设计与优化&#xff0c;为网红经济的发展提供新的思路和方法。 --…

【Web】记录Polar靶场<困难>难度题一遍过

目录 上传 PHP是世界上最好的语言 非常好绕的命令执行 这又是一个上传 网站被黑 flask_pin veryphp 毒鸡汤 upload tutu Unserialize_Escape 自由的文件上传系统​​​​​​​ ezjava 苦海 你想逃也逃不掉 safe_include CB链 phar PHP_Deserializatio…

Stable Diffusion WebUI 图片信息(PNG Info)

本文收录于《AI绘画从入门到精通》专栏&#xff0c;专栏总目录&#xff1a;点这里&#xff0c;订阅后可阅读专栏内所有文章。 大家好&#xff0c;我是水滴~~ 本文主要讲解 Stable Diffusion WebUI 的图片信息功能&#xff0c;主要包括&#xff1a;获取生成参数、将图片发送到其…

Spark实战:词频统计

文章目录 一、Spark实战&#xff1a;词频统计&#xff08;一&#xff09;Scala版1、分步完成词频统计2、一步搞定词频统计 &#xff08;二&#xff09;Python版1、分步完成词频统计2、一步搞定词频统计 二、实战总结 一、Spark实战&#xff1a;词频统计 &#xff08;一&#x…

【黑马头条】-day05延迟队列文章发布审核-Redis-zSet实现延迟队列-Feign远程调用

文章目录 昨日回顾今日内容1 延迟任务1.1 概述1.2 技术对比1.2.1 DelayQueue1.2.2 RabbitMQ1.2.3 Redis实现1.2.4 总结 2 redis实现延迟任务2.0 实现思路2.1 思考2.2 初步配置实现2.2.1 导入heima-leadnews-schedule模块2.2.2 在Nacos注册配置管理leadnews-schedule2.2.3 导入表…

STM32应用开发——使用PWM+DMA驱动WS2812

STM32应用开发——使用PWMDMA驱动WS2812 目录 STM32应用开发——使用PWMDMA驱动WS2812前言1 硬件介绍1.1 WS2812介绍1.1.1 芯片简介1.1.2 引脚描述1.1.3 工作原理1.1.4 时序1.1.5 传输协议 1.2 电路设计 2 软件编程2.1 软件原理2.2 测试代码2.2.1 底层驱动2.2.2 灯效应用 2.3 运…

css实现更改checkbox的样式;更改checkbox选中后的背景色;更改checkbox选中后的icon

<input class"check-input" type"checkbox"> .check-input {width: 16px;height: 16px;} /* 设置默认的checkbox样式 */input.check-input[type"checkbox"] {-webkit-appearance: none; /* 移除默认样式 */border: 1px solid #999;outl…

go连接数据库(原生)

根据官网文档 Go Wiki: SQL Database Drivers - The Go Programming Language 可以看到go可以连接的关系型数据库 ​ 常用的关系型数据库基本上都支持&#xff0c;下面以mysql为例 下载mysql驱动 打开上面的mysql链接 GitHub - go-sql-driver/mysql: Go MySQL Driver i…