当前位置: 首页 > news >正文

【深入浅出程序设计竞赛(基础篇)第三章 算法从0开始】

深入浅出程序设计竞赛(基础篇)第三章 算法从0开始

  • 第三章 例题
    • 例3-1
    • 例3-2
    • 例3-3
    • 例3-4
    • 例3-5
    • 例3-6
    • 例3-7
    • 例3-8
    • 例3-9
    • 例3-10
    • 例3-11
    • 例3-12
  • 第三章 课后习题
    • 3-1
    • 3-2
    • 3-3
    • 3-4
    • 3-5
    • 3-6
    • 3-7
    • 3-8
    • 3-9

第三章 例题

例3-1

#include<iostream>
using namespace std;int main(){int a, b;cin >> a >> b;cout << (a > b) << ' ';cout << (a <= b) << ' ';cout << (a != b) << endl;return 0;
}//运算符优先级
//高                                         低
//() * / % + - < > >= <= == !=
//比较两个浮点数是否相等采用差值是否小于一定程序,如fabs(a-b) < 1e-6

例3-2

#include<iostream>
using namespace std;int main(){int x; bool p1, p2;cin >> x;p1 = x % 2 == 0;p2 = 4 < x && x <= 12;cout << (p1 && p2) << ' '; //两个性质同时成立cout << (p1 || p2) << ' '; //两个性质至少一个成立cout << (p1 ^ p2) << ' '; //两个性质刚好一个成立cout << (!p1 && !p2); //两个性质同时不成立// cout << !(p1 || p2); //也可以这么写return 0;
}// 运算优先级补充
// 高                                          低
// () ! - ++ -- * / % << >> < > <= >= == != && ||

例3-3

能被400整除 或者 被4整除且不能被100整除 是闰年

#include<iostream>
using namespace std;int main(){int x; bool p;cin >> x;p = (x % 400 == 0) || (x % 4 == 0) && (x % 100 != 0);//p = !(x % 400) cout << p << endl;return 0;
}

例3-4

#include<iostream>
using namespace std;int main(){int x;cin >> x;cout << "Today, I ate " << x << " apple";if(x != 0 && x != 1){ // 也可写成 !(x==0 || x==1)cout << "s";}cout << "." << endl;return 0;
}

例3-5

#include<iostream>
using namespace std;int main(){int n;cin >> n;if ((5 * n) < (11 + 3 * n)) {cout << "Local" << endl;} else{cout << "Luogu" << endl;}return 0;
}

例3-6

#include<iostream>
using namespace std;int main(){char opt;cin >> opt;switch(opt){case 'G': cout << "Hello, my master!" << endl;case 'N': cout << "I'm Xiaoluo." << endl; break;case 'S': cout << "Teinei teinei teinei~" << endl; break;case 'B': case 'Q':cout << "Bye bye!" << endl;break;default: cout << "Sorry.." << endl;}return 0;
}

例3-7

#include<iostream>
using namespace std;int main(){double m, h, BMI;cin >> m >> h;BMI = m / h / h;if(BMI < 18.5)cout << "Underweight";else if(BMI < 24)cout << "Normal";else{cout << BMI << endl;cout << "Overweight" << endl;}return 0;
}

例3-8

解法一:

#include<cstdio>
using namespace std;int main(){int a, b, c;scanf("%d%d%d", &a, &b, &c);if(a <= b && b <= c) printf("%d %d %d\n", a, b, c);else if(a <= c && c <= b) printf("%d %d %d\n", a, c, b);else if(b <= a && a <= c) printf("%d %d %d\n", b, a, c);else if(b <= c && c <= a) printf("%d %d %d\n", b, c, a);else if(c <=a && a <= b) printf("%d %d %d\n", c, a, b);else /*if (c <= b && b <= a)*/ printf("%d %d %d\n", c, b, a);return 0;
}

解法二:

#include<cstdio>
using namespace std;int main(){int a, b, c;scanf("%d%d%d", &a, &b, &c);if(a >= b && a >= c)if(b >= c) printf("%d %d %d\n", c, b, a);else printf("%d %d %d\n", b, c, a);else if(b >= a && b >= c)if(a >= c) printf("%d %d %d\n", c, a, b);else printf("%d %d %d\n", a, c, b);else // if(c >= a && c >= b) 本句可加可不加if(a >= b) printf("%d %d %d\n", b, a, c);else printf("%d %d %d\n", a, b, c);return 0;
}

例3-9

#include<iostream>
using namespace std;
int main(){int y, m;cin >> y >> m;switch(m){case 1: case 3: case 5: case 7: case 8: case 10: case 12: cout << 31 << endl; break;case 4: case 6: case 9: case 11:cout << 30 << endl; break;case 2:if(!(y % 400) || !(y % 4) && y % 100)cout << 29 << endl;elsecout << 28 << endl;break;default: break;}return 0;
}

例3-10

#include<iostream>
using namespace std;int main(){int t1, t2, maxtime = 8, maxday = 0;cin >> t1 >> t2;if (t1 + t2 > maxtime) maxtime = t1 + t2, maxday = 1;cin >> t1 >> t2;if (t1 + t2 > maxtime) maxtime = t1 + t2, maxday = 2;cin >> t1 >> t2;if (t1 + t2 > maxtime) maxtime = t1 + t2, maxday = 3;cin >> t1 >> t2;if (t1 + t2 > maxtime) maxtime = t1 + t2, maxday = 4;cin >> t1 >> t2;if (t1 + t2 > maxtime) maxtime = t1 + t2, maxday = 5;cin >> t1 >> t2;if (t1 + t2 > maxtime) maxtime = t1 + t2, maxday = 6;cin >> t1 >> t2;if (t1 + t2 > maxtime) maxtime = t1 + t2, maxday = 7;cout << maxday;return 0;
}

例3-11

解法一:

#include<iostream>
using namespace std;
int main(){int n, n1, n2, n3, p1, p2, p3, t1, t2, t3, total;cin >> n >> n1 >> p1 >> n2 >> p2 >> n3 >> p3;t1 = !(n % n1) ? n / n1 * p1 : (n / n1 + 1) * p1;t2 = !(n % n2) ? n / n2 * p2 : (n / n2 + 1) * p2;t3 = !(n % n3) ? n / n3 * p3 : (n / n3 + 1) * p3;total = t1; //解设第一种是最省钱的方案if (t2 < total) total = t2;if (t3 < total) total = t3;cout << total << endl;return 0;
}

解法二:
可以采用ceil函数进行上取整运算直接获取需要购买几包铅笔

#include<iostream>
#include<cmath>
using namespace std;
int main(){int n, n1, n2, n3, p1, p2, p3, t1, t2, t3, total;cin >> n >> n1 >> p1 >> n2 >> p2 >> n3 >> p3;t1 = ceil(1.0 * n / n1) * p1;t2 = ceil(1.0 * n / n2) * p2;t3 = ceil(1.0 *n / n3) * p3;total = t1; //解设第一种是最省钱的方案if (t2 < total) total = t2;if (t3 < total) total = t3;cout << total << endl;return 0;
}

例3-12

#include<iostream>
using namespace std;
int main(){char a, b, c, d, e, f, g, h, i, j;int check;scanf("%c-%c%c%c-%c%c%c%c%c-%c",  &a, &b, &c, &d, &e, &f, &g, &h, &i, &j);check = (a - '0') * 1 + (b - '0') * 2 + (c - '0') * 3 + (d - '0') * 4 + (e - '0') * 5 + (f - '0') * 6 + (g - '0') * 7 + (h - '0') * 8 + (i - '0') * 9;check %= 11;if(j=='X' && check == 10 || check == j - '0')printf("Right\n");elseprintf("%c-%c%c%c-%c%c%c%c%c-%c", a, b, c, d, e, f, g, h, i, check==10?'X':check+'0');return 0;
}

第三章 课后习题

3-1

#include<iostream>
using namespace std;
int main(){int a = 3, b = 4, c = 5;cout << (a < b || b > c || a > b); //1cout << (a > c || b > a && c > b); //1cout << (b - a == c - b); //1cout << (a * b - c > a * c - b || a * b + b * c == b * b * (c - a)); //1return 0;
}

3-2

#include<iostream>
using namespace std;
int main(){int a = 1, b = 0, c = 1;cout << (!a||!b); //1cout << (a&&!a) || (b||!b); //0 这是因为<<优先级高于||,所以结果为0cout << (a&&b&&c||!a||!c); //0cout << (a&&(b&&c||a&&c)); //1cout << (!b&&(c&&(a&&(!c||(!b||(!a)))))) ;//1return 0;
}

3-3

1) x % 2 == 0
2) x % 4 == 0
3) sqrt(x) == floor(sqrt(x))
4) cbrt(x) == floor(cbrt(x))
5) pow(x % 10, 3) + pow(x / 10 % 10, 3) + pow(x / 100, 3) == x 

3-4

#include<cstdio>
using namespace std;
int main(){int p;double ans;scanf("%d", &p);if (p <= 150) ans = 0.4463 * p;else if(p >= 151 && p <= 400) ans = 0.4463 * 150 + 0.4663 * (p - 150);else ans = 0.4463 * 150 + 0.4663 * 250 + 0.5663 * (p - 400);printf("%.1lf", ans);return 0;
}

3-5

#include<iostream>
using namespace std;int main(){int x;unsigned long long n, ans = 0;cin >> x >> n;for(int i = 0; i < n; i++){if (x != 6 && x != 7) ans += 250;if (x == 7) x = 1; //周日之后是周一所以赋值为1else x++;}cout << ans;return 0;
}

3-6

注意数据范围

#include<bits/stdc++.h> //万能头
using namespace std;
#define ll long longint main(){ll a, b, c;cin >> a >> b >> c;ll maxl = max(a, max(b, c));ll minl = min(a, min(b, c));cout << minl / __gcd(minl, maxl)  << '/' << maxl / __gcd(minl, maxl);return 0;
}

3-7

#include<iostream>
using namespace std;int main(){int a[10];for (int i = 0; i < 10; i++){cin >> a[i];}int height, ans = 0;cin >> height;height += 30;for (int i = 0; i < 10; i++){if(a[i] <= height) ans++;}cout << ans;return 0;
}

3-8

由余弦定理得, a^2 = b^2 + c^2 - 2bccosA
所以b^2 + c^2 - a^2 = 2bccosA
又因为b > 0 c > 0
当A为锐角时 cosA>0,则b^2 + c^2 - a^2 > 0,即b^2 + c^2 > a^2时为锐角三角形
当A为直角时 cosA=0,则b^2 + c^2 - a^2 = 0,即b^2 + c^2 = a^2时为直角三角形
当A为钝角时 cosA<0,则b^2 + c^2 - a^2 < 0,即b^2 + c^2 < a^2时为钝角三角形

#include<bits/stdc++.h>
using namespace std;int main(){int a[3];for (int i = 0; i < 3; i++){cin >> a[i];}sort(a, a+3);if (a[0] + a[1] <= a[2]) cout << "Not triangle" << endl;else{if (a[0] * a[0] + a[1] * a[1] == a[2] * a[2]) cout << "Right triangle" << endl;else if (a[0] * a[0] + a[1] * a[1] > a[2] * a[2]) cout << "Acute triangle" << endl;else cout << "Obtuse triangle" << endl;if (a[0] == a[1] && a[1] == a[2]) {cout << "Isosceles triangle" << endl;cout << "Equilateral triangle" << endl;}else if(a[0] == a[1] || a[0] == a[2] || a[1] == a[2]) cout << "Isosceles triangle" << endl;}return 0;
}

3-9

#include<iostream>
#include<algorithm>
using namespace std;int main(){int a[3];for(int i = 0; i < 3; i++){cin >> a[i];}sort(a, a+3);char b[3];for(int j = 0; j < 3; j++){cin >> b[j];if (j != 2) cout << a[b[j] - 'A'] << ' ';else cout << a[b[j] - 'A'];}return 0;
}

相关文章:

【深入浅出程序设计竞赛(基础篇)第三章 算法从0开始】

深入浅出程序设计竞赛&#xff08;基础篇&#xff09;第三章 算法从0开始 第三章 例题例3-1例3-2例3-3例3-4例3-5例3-6例3-7例3-8例3-9例3-10例3-11例3-12 第三章 课后习题3-13-23-33-43-53-63-73-83-9 第三章 例题 例3-1 #include<iostream> using namespace std;int …...

安全之安全(security²)博客目录导读

研究方向&#xff1a;安全之安全 研究内容&#xff1a;ARM/RISC-V安全架构、TF-A/TEE之安全、GP安全认证、静态代码分析、FUZZ模糊测试、IDA逆向分析、安全与功耗等&#xff0c;欢迎您的关注&#x1f496;&#x1f496; 一、ARM安全架构 1、ARM安全架构及其发展趋势&#xff0…...

ubuntu安装opencv4

apt 安装 sudo apt install libopencv-dev python3-opencvpkg-config查看安装 sudo apt install pkg-configpkg-config --modversion opencv4pkg-config --libs --cflags opencv4参考 如何在 Ubuntu 20.04 上安装 OpenCV pkg-config 详解...

Qt 当磁盘可用空间小于指定大小时删除早期的文件

1. 需求 用户反应&#xff0c;电脑由于自身磁盘空间只有128G&#xff0c;由于软件执行一次任务&#xff0c;就要录视频记录&#xff0c;导致磁盘空间爆满&#xff0c;电脑卡&#xff0c;无法再次生成视频 2. 分析&#xff1a;当时软件没有写自动删除视频的代码导致的。 可以…...

浙大数据结构第七周之07-图6 旅游规划

题目详情&#xff1a; 有了一张自驾旅游路线图&#xff0c;你会知道城市间的高速公路长度、以及该公路要收取的过路费。现在需要你写一个程序&#xff0c;帮助前来咨询的游客找一条出发地和目的地之间的最短路径。如果有若干条路径都是最短的&#xff0c;那么需要输出最便宜的…...

RocketMQ双主双从同步集群部署

&#x1f388; 作者&#xff1a;互联网-小啊宇 &#x1f388; 简介&#xff1a; CSDN 运维领域创作者、阿里云专家博主。目前从事 Kubernetes运维相关工作&#xff0c;擅长Linux系统运维、开源监控软件维护、Kubernetes容器技术、CI/CD持续集成、自动化运维、开源软件部署维护…...

分类预测 | MATLAB实现EVO-CNN多输入分类预测

分类预测 | MATLAB实现EVO-CNN多输入分类预测 目录 分类预测 | MATLAB实现EVO-CNN多输入分类预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.MATLAB实现EVO-CNN多输入分类预测 2.代码说明&#xff1a;量谷优化卷积神经网络的数据分类预测&#xff1a;要求于Matlab …...

DAY04_SpringMVC—SpringMVC简介PostMan和ApiFox工具使用SpringMVC请求与响应REST风格

目录 一 SpringMVC简介1 SpringMVC概述问题导入1.1 SpringMVC概述 2 入门案例问题导入2.0 回顾Servlet技术开发web程序流程2.1 使用SpringMVC技术开发web程序流程2.2 代码实现【第一步】创建web工程&#xff08;Maven结构&#xff09;【第二步】设置tomcat服务器&#xff0c;加…...

phpstorm配置ftp同步文件到服务器

这里的默认快捷键 不是 CtrlS &#xff1b;需要设置快捷键&#xff0c;这里原来是save all操作时上传文件到服务器&#xff1b; ** 设置好快捷键后按 CtrlS就会同步文件&#xff08;添加删除文件后保存&#xff0c;服务器也会同步&#xff09; ** 搜索出save all 后&#xf…...

前端jd要求:了解一门后端开发语言优先 解决方案之Node.js

前端jd要求&#xff1a;了解一门后端开发语言优先 解决方案之Node.js 前言常见的后端开发语言一、什么是 Node.js二、学习 Node.js 的前置知识三、学习 Node.js 的步骤1、Node.js 的安装2、Node.js 的基本语法和 API模块导入和导出文件读写操作HTTP 服务器命令行参数 3、Node.j…...

什么是ServiceMesh(Istio一)

现在最火的后端架构无疑是微服务了&#xff0c;微服务将之前的单体应用拆分成了许多独立的服务应用&#xff0c;每个微服务都是独立的&#xff0c;好处自然很多&#xff0c;但是随着应用的越来越大&#xff0c;微服务暴露出来的问题也就随之而来了&#xff0c;微服务越来越多&a…...

【腾讯云 Cloud Studio 实战训练营】Hexo 框架 Butterfly 主题搭建个人博客

什么是Cloud Studio Cloud Studio 是基于浏览器的集成式开发环境&#xff08;IDE&#xff09;&#xff0c;为开发者提供了一个永不间断的云端工作站。用户在使用 Cloud Studio 时无需安装&#xff0c;随时随地打开浏览器就能在线编程。 ​ Hexo 博客成品展示 本人博客如下&…...

搭建Excel服务器

1、下载Excel服务器 下载地址 2、解压文件 3、打开服务器 4、服务器运行信息 5、连接测试 打开客户端 6、登录到服务器 默认账号 密码 admin 3 修改文件保存路径(服务器端点击配置) 7、客户端整体界面 8、配置权限 9、设计模板 10、其他用户登录就可以填写信息 11、用户&#…...

渗透测试成功的8个关键

渗透测试 (penetration test)并没有一个标准的定义&#xff0c;国外一些安全组织达成共识的通用说法是&#xff1a;渗透测试是通过模拟恶意黑客的攻击方法&#xff0c;来评估计算机网络系统安全的一种评估方法。这个过程包括对系统的任何弱点、技术缺陷或漏洞的主动分析&#x…...

【leetcode】链表part2

24. 两两交换链表中的节点 迭代方法 public static ListNode swapPairs(ListNode head) {// 输入&#xff1a;head [1,2,3,4]// 输出&#xff1a;[2,1,4,3]ListNode dummy new ListNode(0);dummy.next head;ListNode cur dummy;while (cur.next ! null && cur.ne…...

C#数据类型转换

目录 1.常用的数据类型: ​编辑1.1别名概念例子: 输出结果&#xff1a; 2.数值类型之间的相互转换: 2.1举例: ​编辑输出结果: 1.常用的数据类型: 1.1别名概念例子: 输出结果&#xff1a; 用GetType来获取数据类型的时候&#xff0c;就是指向System.Byte和System.Char这个…...

mybatis-plus逻辑删除的坑

一旦在逻辑字段上加了TableLogic逻辑删除的配置&#xff0c;并且使用mybatis-plus自带的方法时&#xff08;如果自己用xml写SQL不会出现下面的情况&#xff09; 查询、修改时会自动排除逻辑删除的数据 当使用mybatis-plus自带的查询方法时&#xff0c;就不用每次查询的时候跟…...

SQL Server基础之游标

一&#xff1a;认识游标 游标是SQL Server的一种数据访问机制&#xff0c;它允许用户访问单独的数据行。用户可以对每一行进行单独的处理&#xff0c;从而降低系统开销和潜在的阻隔情况&#xff0c;用户也可以使用这些数据生成的SQL代码并立即执行或输出。 1.游标的概念 游标是…...

(二)结构型模式:4、组合模式(Composite Pattern)(C++实例)

目录 1、组合模式&#xff08;Composite Pattern&#xff09;含义 2、组合模式应用场景 3、组合模式的优缺点 4、组合模式的UML图学习 5、C实现组合模式的简单示例&#xff08;公司的OA系统&#xff09; 1、组合模式&#xff08;Composite Pattern&#xff09;含义 组合模…...

flask接口请求频率限制

pip install Flask-Limiter Flask-Limiter官方文档 基本使用 默认是用IP作为key进行计数的&#xff0c;你也可以自定义key&#xff0c;具体看官网 from flask import Flask from flask_limiter import Limiter from flask_limiter.util import get_remote_addressapp Flas…...

javaweb监听器和juery技术

监听servlet创建 package com.hspedu.listener;import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener;/*** 老韩解读* 1. 当一个类实现了 ServletContextListener* 2. 该类就是一个监听器* 3. 该类可…...

C++并发多线程--std::unique_lock的使用

目录 1--std::unique_lock的使用 1-1--std::adopt_lock参数 1-2--std::try_to_lock参数 1-3--std::defer_lock参数 1-4--互斥量所有权转移 1--std::unique_lock的使用 常用成员函数&#xff1a; ① lock(): 加锁&#xff1b; ② unlock(): 解锁&#xff1b; ③ try_lock()…...

【ChatGLM】ChatGLM-6B模型Win+4GB显卡本地部署笔记

ChatGLM-6B是清华大学知识工程和数据挖掘小组发布的一个类似ChatGPT的开源对话机器人&#xff0c;由于该模型是经过约1T标识符的中英文训练&#xff0c;且大部分都是中文&#xff0c;因此十分适合国内使用。 预期环境 本机电脑备注&#xff1a; Win10专业版 32G内存256固态系统…...

青翼科技自研2路250MSPS DA回放FMC子卡模块

FMC150_V30是一款基于VITA57.1规范的2路125MSPS采样率16位分辨率AD采集、2路250MSPS采样率16位分辨率DA回放FMC子卡模块。该模块遵循VITA57.1规范&#xff0c;可直接与符合VITA57.1规范的FPGA载卡配合使用&#xff0c;板卡ADC器件采用ADI公司的AD9268芯片&#xff0c;板卡DAC器…...

硬件产品经理:从入门到精通(新书发布)

目录 简介 新书 框架内容 相关课程 简介 在完成多款硬件产品从设计到推向市场的过程后。 笔者于2020年开始在产品领域平台输出硬件相关的内容。 在这个过程中经常会收到很多读者的留言&#xff0c;希望能推荐一些硬件相关的书籍或资料。 其实&#xff0c;笔者刚开始做硬…...

Opencv-C++笔记 (17) : 模板匹配

文章目录 1--概念2-- 方法3 结果3.1 ROI区域的获取使用自适应目标匹配 1–概念 opencv 提供了一个专门用于模板匹配的函数 cv::matchTemplate();其调用方式如下&#xff1a; void cv::matchTemplate(cv::InputArray image, // 用于搜索的输入图像, 8U 或 32F, 大小 W-Hcv::Inpu…...

Maven(四)常用命令大全

目录 一、mvn 命令参数二、mvn 插件命令1.介绍2.查看插件的使用文档3.常用的插件命令 官网地址&#xff1a; https://maven.apache.org/官方插件清单&#xff1a; https://maven.apache.org/plugins/index.html Maven 是一个强大的构建工具&#xff0c;它提供了许多命令来进行项…...

13.3 目标检测和边界框

锚框的计算公式 假设原图的高为H,宽为W 详细公式推导 以同一个像素点为锚框&#xff0c;可以生成 (n个缩放 m个宽高比 -1 )个锚框 锚框的作用&#xff1a; 不用直接去预测真实框的四个坐标&#xff0c;而是&#xff1a; 1.先生成多个锚框。 2.预测每个锚框里是否含有要预测…...

TCP/IP网络江湖初探:物理层的奥秘与传承(物理层上篇-基础与本质)

〇、引言 在这个数字时代,计算机网络如同广袤的江湖,数据在其中畅游,信息传递成为了生活的常态。然而,在这个充满虚拟奇观的网络江湖中,隐藏着一个不容忽视的存在,那就是物理层,这个江湖的基石。就如同江湖中的土地一样,物理层作为计算机网络的基础,承载着数据的最初转…...

计算机视觉五大核心研究任务全解:分类识别、检测分割、人体分析、三维视觉、视频分析

目录 一、引言1.1 计算机视觉的定义1.1.1 核心技术1.1.2 应用场景 1.2 历史背景及发展1.2.1 1960s-1980s: 初期阶段1.2.2 1990s-2000s: 机器学习时代1.2.3 2010s-现在: 深度学习的革命 1.3 应用领域概览1.3.1 工业自动化1.3.2 医疗图像分析1.3.3 自动驾驶1.3.4 虚拟现实与增强现…...