蓝桥杯第七届大学B组详解

news2024/11/25 12:55:38

目录

1.煤球数量;

2.生日蜡烛;

3.凑算式

4.方格填数

5.四平方和

6.交换瓶子

7.最大比例


1.煤球数量

题目解析:可以根据·题目的意思,找到规律。

1     *-  1个

2    ***   3个

3   ******  6个

4 ********** 10个

不难发现 第一层的个数加上第二层的层数就是第二层的煤球数目。本质就是找规律数学。

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

int main()
{
    int n = 0, sum = 0;
    for(int i = 1; i <= 100; i++)
    {
          n += i;
          sum += n;
    }
    cout << sum << endl;
    return 0;
}

2.生日蜡烛

题目解析:直接枚举就行;

#include<iostream>
using namespace std;
int main()
{
	for (int i = 1;i <= 100; i++)
	{
		int sum = 0;
		for (int j = i; j <= 100; j++)
		{
			sum += j;
			if (sum == 236)
				cout << i << endl;
	 }
	}
	return 0;
}

3.凑算式

题目解析:是不是和三羊献瑞有点像,又可以使用next_premutation();

注意这个题目弄错了是1-9数字;md我就整整调试1个多小时,心态差点崩溃了,都开始怀疑自己了。

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

int ret = 0;
int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9};


bool check()
{
     int x = a[3] * 100 + a[4] * 10 + a[5];
     int y = a[6] * 100 + a[7] * 10 + a[8];

     if(((a[1] * y) + (a[2] * x)) % (a[2] * y) == 0 && a[0] + ((a[1] * y) + (a[2] * x)) / (a[2] * y) == 10)
     {
        return true;
     }
     else
     {
       return false;
     }
}

int main()
{
    do
    {
      if(check())
      {
         ret++;
      }
    }while(next_permutation(a, a + 9));

    cout << ret << endl;
    return 0;
}

4.方格填数

题目解析:动态规划类型题目,就是在方格中填数,如果这个方格没有被使用过并且方格相邻不重复就将数字填进去,填完就是一种方案数。累计方案数。

细节:初始化为-20,因为如果为填9就算相邻区分不出来。

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

//方格矩阵,因为要使用到相邻的元素所以就会使用到就多创建行列
// -20   -20  -20-20
//    +--+--+--+
//    |  |  |  | -20
// +--+--+--+--+
// |  |  |  |  | -20
// +--+--+--+--+
// |  |  |  |    -20
// +--+--+--+
//-20  -20 -20 -20 -20
int a[4][5];
//判断是否被使用过
int vis[10];
int sum = 0;
int dx[4] = {-1, -1, -1, 0};
int dy[4] = {0, 1, -1, -1};

bool check(int x, int y, int num)
{
   for(int i = 0; i < 4; i++)
   {
      int xx = dx[i] + x;
      int yy = dy[i] + y;
      //边界检查
      if(xx < 3 && xx >= 0 && yy < 4 && yy >= 0)
      {
          //如果相邻的话那么相差一定为1;
          if(abs( a[xx][yy] - num ) == 1)
              return false;
      }
   }
   return true;
}


void dfs(int x, int y)
{
    //出口:第二行第三列
    if(x == 2 &&  y == 3)
    {
       sum++;
       return;
    }
    
    //开始填数
    for(int i = 0; i < 10; i++)
    {
        //判断没被使用过的方格并且不相临
        if(vis[i] == 0 && check(x, y, i))
        {
            vis[i] = 1;
            a[x][y] = i;
            //递归下一个方格,或者下一行
            if(y + 1 < 4)
               dfs(x, y + 1);
            else
               dfs(x + 1, 0);
            //回溯
            vis[i] = 0;
        }
    }
}

int main()
{
   //矩阵初始
    for(int i = 0; i < 4; i++)
   {
      for(int j = 0; j < 4; j++)
      {
         a[i][j] = -20;
      }
   }
   //从第0行第一列开始;
   dfs(0,1);
   cout << sum << endl;
   return 0;
}

5.四平方和

题目解析:可以想到暴力枚举的方法,复杂度为0(n^4)是非常恐怖的,那么就要想办法降低;就需要优化。

首先要知道 N=  a*a + b*b + c*c + d*d;

那么 a 一定不会超过 N / 4; b 一定不会超过 N / 3; c 一定不会超过 N / 2;

d 一定不会超过 N; 

其次我们可以先算 a 和 b,那么 N - a*a + b*b = c*c + d*d;

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


int main()
{
   //输入
   int N; 
   cin >> N;
   map<int,int> exit;
   //c值存一下。
   for(int c = 0; c * c <= N / 2; c++)
   {
     for(int d = c; c*c + d*d <= N; d++)
     {
         if(exit.find(c * c + d * d) == exit.end())
            exit[c * c + d * d] = c;
     }
   }

   for(int a  = 0; a * a <= N / 4; a++)
   {
      for(int b = a; a*a + b*b <= N / 3; b++)
      {
         if(exit.find(N - a * a - b * b) != exit.end())
         {
            int c = exit[N - a * a - b * b];
            int d = (int)sqrt(N - a*a - b*b - c*c);
            cout << a << b << c << d << endl;
            //找到直接返回
            return 0;
         }
      }
   }

   return 0;
}

6.交换瓶子

题目解析:是不是会想到冒泡,但是你看看数据范围,那么就是肯定要优化;将当前元素与下标进行比较,如果相同直接跳过,不相同那么就要找到和下标相同的数据下标进行交换。

#include<iostream>

using namespace std;
int a[10001];
int N;
int sum = 0;

int pos(int x)
{
    for(int i = 1; i <= N; i++)
    {
       if(a[i] == x)
       {
          return i;
       }
    }
    return -1;
}

void Swap(int i, int j)
{
    int tmp = a[i];
    a[i] = a[j];
    a[j] = tmp;
}

int main()
{
   //数据处理;
   cin >> N;
   for(int i = 1; i <= N; i++)
   {
       cin >> a[i];
   }

   //进行查寻
   for(int i = 1; i <= N; i++)
   {
       if(a[i] == i)
          continue;
       else
       {
          //找到和下标不一样的数,和下标交换,不需要改变原来的值。
          Swap(pos(i), i);
          sum++;
       }
   }
   cout << sum << endl;
   return 0;
}

 7.最大比例

题目解析:本道题说到所有级别的奖金构成一个等比数列,先进行排序,将第一个数作为分母,分子分别都是后面的数,求取他们的最大公约数,再用两个数组将分子分母分别除以最大公约数,再存放起来。最后再对分子分母分别求差最小就会得到最终答案。

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

#define N 100
long long max = 1000000000;
long long x[N], a[N], b[N];


long long gcd(long long a, long long b)
{
     return b ? gcd(b, a % b) : a;
}

long long gcd_sub(long long a, long long b)
{
      if(b == 1) return a;
      if(b > a)  swap(a, b);
      return gcd_sub(b, a / b);
}

int main()
{
    //输入完成:
    int n;
    cin >> n;
    for(int i = 0; i < n; i++)
    {
       cin >> x[i];
    }
    
    //排序
    sort(x, x + n);

    long long dd;//求最大公约数
    int cnt = 0;
    for(int i = 1; i < n; i++)
    {
       if(x[i] != x[i-1]) //去除为1的情况
       {
          dd = gcd(x[i], x[0]);
          a[cnt] = x[i] / dd; //分子
          b[cnt] = x[0] / dd; //分母
          cnt++;
       }
    }

    long long 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;
     return 0;
}

其实静下心来感受会觉得题目不难,就是要找到规律,总结方法,写代码注意细节,那么绝对可以取得高分。

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

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

相关文章

C++入门知识详细讲解

C入门知识详细讲解 1. C简介1.1 什么是C1.2 C的发展史1.3. C的重要性1.3.1 语言的使用广泛度1.3.2 在工作领域 2. C基本语法知识2.1. C关键字(C98)2.2. 命名空间2.2 命名空间使用2.2 命名空间使用 2.3. C输入&输出2.4. 缺省参数2.4.1 缺省参数概念2.4.2 缺省参数分类 2.5. …

Linux - 第三节

改变用户类型 su 仅单纯的进行身份变化 依旧处于普通用户里面 su - 进行重新登录更改身份 退出用exit / ctrld su 用户名 改成成其他身份 对一条命令进行提权 sudo command r:可读 w:可写 x:可执行 -:对应的权限位置&#xff0c;没有权限 去掉所有权限 chmod u…

Qt中继承QCheckBox的类结合QTableWidget实现多选并且每个多选的id都不一样

1.相关描述 继承QCheckBox的类MyCheckBox&#xff0c;利用QTableWidget的setCellWidget方式添加MyCheckBox类的对象 2.相关页面 3.相关代码 mycheckbox.h #ifndef MYCHECKBOX_H #define MYCHECKBOX_H#include <QCheckBox> #include <QObject>class MyCheckBox : pu…

Elvis Presley 英文阅读

Elvis Presley 官方翻译 One of the most popular American singers of thetwentieth century was Elvis Presley. He made theRock & Roll music popular around the world. He sold millions of records and made manysuccessful films, and he helped change the dir…

基于SSM医院病历管理系统

基于SSM医院病历管理系统的设计与实现 摘要 病历管理系统是医院管理系统的重要组成,在计算机技术快速发展之前&#xff0c;病人或者医生如果想记录并查看自己的健康信息是非常麻烦的&#xff0c;因为在以往病人的健康信息通常只保存在自己的病历卡或者就诊报告中&#xff0c;…

TikTok直播专线:解决出海网络问题痛点,提升商业效率

近年来&#xff0c;TikTok作为全球最受欢迎的社交媒体平台之一&#xff0c;成为商家获取商机与市场的重要平台。然而&#xff0c;尽管商家纷纷进入TikTok&#xff0c;试图借助其强大的社交网络进行产品推广和销售&#xff0c;但在TikTok平台进行直播时&#xff0c;往往会遇到网…

何时应用 RAG 与微调

充分发挥 LLM 的潜力需要在检索增强生成&#xff08;RAG&#xff09;和微调之间选择正确的技术。 让我们来看看何时对 LLM、较小的模型和预训练模型使用 RAG 与微调。我们将介绍&#xff1a; LLM 和 RAG 的简要背景RAG 相对于微调 LLM 的优势何时针对不同模型大小对 RAG 进行…

WebGIS 之 vue3+vite+ceisum

1.项目搭建node版本在16以上 1.1创建项目 npm create vite 项目名 1.2选择框架 vuejavaScript 1.3进入项目安装依赖 cd 项目名 npm install 1.4安装cesium依赖 pnpm i cesium vite-plugin-cesium 1.5修改vite.config.js文件 import { defineConfig } from vite import vue fr…

labelme AI 模型运用

一、lebelme 1、界面介绍 点击上图位置&#xff0c;选择对应的模型。这里我每个模型都测试了一下&#xff0c;EfficientSam这个模型最好用&#xff0c;准确率和速度都ok。 2、使用方法 目标框标注方法&#xff1a;点左上角【编辑】-> 【Create Ai-Mask】就可以标志了&…

在 Three.js 中,OBJExporter 是一个用于将 Three.js 中的场景导出为 OBJ 格式的类。

demo案例 在 Three.js 中&#xff0c;OBJExporter 是一个用于将 Three.js 中的场景导出为 OBJ 格式的类。下面是关于它的入参、出参、属性和方法的解释&#xff1a; 类名&#xff1a;OBJExporter 构造函数&#xff1a; THREE.OBJExporter()说明&#xff1a; 创建一个 OBJE…

2d导入人物素材进行分割后设置图层

1、设置分辨率大小 2、相机调整大小&#xff0c;要符合场景 3、选择2D sprite 编辑器 或者 点击这个也行 4、分割图像 5、设置过滤模式 6、图层设置

CQI-17:2021 V2 英文 、中文版。特殊过程:电子组装制造-锡焊系统评审标准

锡焊作为一个特殊的工艺过程&#xff0c;由于其材料特性的差异性、工艺参数的复杂性和过程控制的不确定性&#xff0c;长期以来一直视为汽车零部件制造业的薄弱环节&#xff0c;并将很大程度上直接导致整车产品质量的下降和召回风险的上升。 美国汽车工业行动集团AIAG的特别工…

MySQL 之 数据库操作 及 表操作

&#x1f389;欢迎大家观看AUGENSTERN_dc的文章(o゜▽゜)o☆✨✨ &#x1f389;感谢各位读者在百忙之中抽出时间来垂阅我的文章&#xff0c;我会尽我所能向的大家分享我的知识和经验&#x1f4d6; &#x1f389;希望我们在一篇篇的文章中能够共同进步&#xff01;&#xff01;&…

共享办公室行业面临的最大挑战是什么,未来有哪些可能的发展方向

共享办公室行业虽然发展迅速&#xff0c;但也面临着一些挑战和需要解决的问题。咱们来聊聊这行业的最大挑战和未来可能的发展方向。 面临的最大挑战&#xff1a; 市场竞争加剧&#xff1a;随着共享办公室的火热&#xff0c;越来越多的玩家进入市场&#xff0c;竞争变得异常激烈…

CatalyzeCDN-发现真实IP

简介 CatalyzeCDN用与调用Fofa接口&#xff0c;将查询结果进行整理发现其真实IP 使用说明 在同目录下的config.ini配置好Fofa key ./CatalyzeCDN -h # 查看帮助信息 从根域发现真实IP并列出相应资产 ./CatalyzeCDN -r baidu.com 从IP查询相应资产 ./CatalyzeCDN -i 项目…

VS Code常用前端开发插件和基础配置

VS Code插件安装 VS Code提供了非常丰富的插件功能&#xff0c;根据你的需要&#xff0c;安装对应的插件可以大大提高开发效率。 完成前端开发&#xff0c;常见插件介绍&#xff1a; 1、Chinese (Simplified) Language Pack 适用于 VS Code 的中文&#xff08;简体&#xff…

Kubernetes(K8S)学习(二):K8S常用组件

K8S常用组件 一、 Controllers1、ReplicationController(RC)2、ReplicaSet(RS)3、Deployment 二、Labels and Selectors三、Namespace&#xff08;命名空间&#xff09;1、简介2、测试2.1、创建namespace2.2、创建pod 四、Network1、集群内&#xff1a;同一个Pod中的容器通信2、…

【C++入门】输入输出、命名空间、缺省参数、函数重载、引用、内联函数、auto、基于范围的for循环

目录 命名空间 命名空间的定义 命名空间的使用 输入输出 缺省参数 函数重载 引用 常引用 引用的使用场景 内联函数 auto 基于范围的for循环 命名空间 请看一段C语言的代码&#xff1a; #include <stdio.h> #include <stdlib.h>int rand 10;int main…

StringBuffer与StringBuilder

1.区别 (1). String : 不可变字符序列. (2). StringBuffer : 可变字符序列.线程安全&#xff0c;但效率低. (3). StringBuilder : 可变字符序列.线程不安全&#xff0c;但效率高. 既然StringBuffer与StringBuilder都是可变字符序列&#xff0c;但二者咋区分开呢&#xff1f…

【git】git使用手册

目录 一 初始化 1.1 账号配置 1.2 ssh生成 1.2.1 配置ssh 1.2.2 测试SSH 1.3 初始化本地仓库并关联远程仓库 二 使用 2.1 上传 2.2 拉取 三 问题 3.1 关联失败 一 初始化 git的安装很简单,下载后大部分进行下一步完成即可----->地址: git工具下载 1.1 账号配置…