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

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

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

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

第一章 例题

例1-1

#include<iostream>
using namespace std;int main(){cout << "I love Lugou !";return 0;
}

例1-2

#include<iostream>
using namespace std;int main(){cout << 2 + 4 << " " << 10 - 2 - 4 ;return 0;
}

例1-3

#include<iostream>
using  namespace std;int main(){cout << 14 / 4 << endl; // 向下取整为3cout << 14 / 4 * 4 << endl;cout << 14 % 4 << endl;return 0;
}

例1-4

#include<iostream>
using namespace std;int main(){cout << 500.0 / 3 << endl; //整数 加减乘除模 还是 整数,浮点数 加减乘除模 是 小数return 0;
}

例1-5

#include<iostream>
using namespace std;int main(){cout << 500.0 / 3 << endl; // cout输出浮点数默认保留不超过6位有效数字,如果数字过大或过小就会使用科学计数法输出。同样保留不超过6位有效数字cout << 5000000.0 / 3 << endl;cout << 0.000005 / 3 << endl;cout << 5e6 / 3 + 5e-6 / 3 - 5e6 / 3 << endl; //计算机的存储方式决定了浮点数能够表示的精度是有限的,后面章节会讨论return 0;
}

例1-6

#include<iostream>
using namespace std;int main(){//假设甲车是静止的,那么乙车的总路程为 260 + 220,乙车的车速为  (12 + 20) /scout << ( 260 + 220 ) / ( 12 + 20 ) << endl;return 0;
}

例1-7

#include<iostream>
#include<cmath> //sqrt()、pow()两个函数与这个库有关
using namespace std;int main(){cout << pow(6, 2) << endl;  //书中说返回的是浮点数,但是输出的值为36是整数,可能小数点自动省略了?cout << sqrt(pow(6, 2) + pow(9, 2)) << endl;return 0;
}// cmath库中的常用数学函数
//double sin(double x)  正弦
//double cos(double x) 余弦
//double exp(double x) 指数
//double log(double x) 对数
//double pow(double x, double y) 多次方
//double sqrt(double x) 算数平方根
//double fabs(double x) 绝对值
//double ceil(double x) 上整数 >=x
// double floor(double x) 下整数 <=x

例1-8

#include<iostream>
using namespace std;int main(){int balance = 100; //初始余额balance = balance + 10;cout << balance << endl;balance -= 20;cout << balance  << endl;balance = 0;cout << balance << endl;return 0;
}

例1-9

#include<iostream>
#include<cmath>
using namespace std;int main(){double r = 5;const double PI = 3.141593; //定义常量,一经定义在程序运行中无法修改,习惯将常量名用大写字母定义//#define PI 3.141593 这种方法定义常量无需确定其数据类型cout << 2 * PI * r << endl;cout << PI * r * r << endl;cout << PI * r * r << endl;cout << 4.0 / 3 * PI * pow(r, 3) << endl; //不能写成 4/3*PI*pow(r, 3)return 0;
}

例1-10

#include<iostream>
using namespace std;int main(){int num = 1; //第四天num = ( num + 1) * 2; //第三天num = (num + 1) * 2; //第二天num = (num + 1) * 2; //第一天cout <<  num << endl; return 0;
}

例1-11

(选读)评测机队列。洛谷的评测任务是单位时间内均匀增加的。8台测评机30min可以刚好把测评队列中的程序评测完毕,10台测评机6min可以刚好把测评队列中的程序评测完毕。请问“几台评测机可以在10min时刚好把评测队列中的程序评测完毕?

分析: 这是著名的“牛吃草问题”的模型。假设1台评测机1min可以评测1份程序。
首先需要分析每分钟有多少新程序进入评测队列。8台评测机30min可以评测240份,而10台评测机6min可以评测60份,可以得到30min-6min=24min内,增长了240份-60份=180份程序。因此,每分钟程序的增长速度是(240-60)/(30-6) = 7.5份/min。
6min可以评测60份,其中6 * 7.5 = 45份是新提交的程序,原有队列里面有60-45=15份程序。评测机10min一共需要评测15+10*7.5=90份程序,所以需要90/10=9台。根据这个思路,可以写出如下程序:

#include<iostream>
using namespace std;//有点难,直接看答案了
int main(){int n1 = 8, t1 = 30, n2 = 10, t2 =  6;//题目给出的评测机数量和时间int t3 = 10;  //题目要求的时间double inc_rate = (1.0 * n1 * t1 - n2 * t2)  / (t1 - t2); // 增长速度double init_num = n2 * t2 - inc_rate * t2;  //初始队列长度double ans = (init_num + t3 * inc_rate) /  t3; //求得答案cout << ans; return 0;
}

这个问题相比于前面的问题来说比较复杂,很难使用一个表达式来直接求得结果。可以把一个大人物拆分成若干规模比较小的任务,抽丝剥茧,逐步击破,直到求得最终的答案。

补充:牛吃草问题
有一片青草地,每天都匀速地长出青草,这片青草可供27头牛吃6周或供23头牛吃9周,那么这片草地可供21头牛吃几周?

#include<iostream>
using namespace std;int main(){//假设每头牛每周吃1棵草int n1 = 27, t1 = 6, n2 = 23, t2 =  9;int n3 = 21;  //题目给的牛的数量double inc_rate = (1.0 * n2 * t2 - n1 * t1)  / (t2 - t1);  // 每周草的增长速度double init_num = n1* t1 - inc_rate * t1;  //初始草的数量//  21头牛分为15把每周增长的草吃掉,那么只需直到剩下的6头把初始的草吃掉需要多长时间即可double ans = init_num / (n3 - inc_rate); //求得答案cout << ans; return 0;
}

第一章 课后习题

1-1

(1) 3 * x + 5 * y
(2) (c + 1) / (a * b)
(3) sqrt(3 * pow(a, 3))
(4) (n + 2) * (n - 9)

1-2

//C++变量命名规则
// 1、 变量名只能是字母(A-Z,a-z)和数字(0-9)或者下划线(_)组成。
// 2、 第一个字母必须是字母或者下划线开头。
// 3、 不能使用C++关键字来命名变量,以免冲突。
// 4、 变量名区分大小写。(1) kkksc03 合法
(2) OhILoveLuoguVeryMuchAndIWiIIStudy 合法(但是名称太长了)
(3) _1apple 合法
(4) char 不合法 关键字
(5) kkk@SH 不合法 含有@
(6) a 合法
(7) iPhone 合法
(8) 11dimensions 不合法 以数字开头
(9) __stdcall 不合法,是函数

1-3

1-4

#include<iostream>
using namespace std;int main(){cout << 3.0 / 3 / 3 * 9 * 9 << endl; //1cout << ((24 - 4) / 2) * ((24 - 4) / 2 + 4) << endl; //2cout << 480 / (1.4 + 1) << " " << 480 / (1.4 + 1) * 1.4 << endl; //3cout << 11 + 1 << " " << 3 * (11 + 1) + 11 << endl; //4cout << 80 * 12 / (120 - 80) << endl; //5int x = (94 - 35 * 2) / 2 ; int y = 35 - x; cout << x << " " << y << endl; //6double a = 10000 * (1 + 0.035) * (1 + 0.035) * (1 + 0.035) * (1 + 0.035) * (1 + 0.035);double b = 10000 * (1 + 0.04);cout << a  << " " << b << endl;return 0;
}
http://www.lryc.cn/news/117563.html

相关文章:

  • openGauss学习笔记-36 openGauss 高级数据管理-TRUNCATE TABLE语句
  • ChatGPT生成文本检测器算法挑战大赛
  • O2OA开发平台实施入门指南
  • 服装行业多模态算法个性化产品定制方案 | 京东云技术团队
  • MySQL表空间结构与页、区、段的定义
  • RaabitMQ(三) - RabbitMQ队列类型、死信消息与死信队列、懒队列、集群模式、MQ常见消息问题
  • Unity3D GPU Selector/Picker
  • 灰度非线性变换之c++实现(qt + 不调包)
  • 轻量级Web框架Flask
  • 【gridsample】地平线如何支持gridsample算子
  • JPA实现存储实体类型信息
  • 阿里云快速部署开发环境 (Apache + Mysql8.0+Redis7.0.x)
  • 语音秘书:让录音转文字识别软件成为你的智能工作助手
  • 【腾讯云 Cloud Studio 实战训练营】用于编写、运行和调试代码的云 IDE泰裤辣
  • [C#] 简单的俄罗斯方块实现
  • postman官网下载安装登录详细教程
  • (贪心) 剑指 Offer 14- I. 剪绳子 ——【Leetcode每日一题】
  • 如何将Linux上的cpolar内网穿透设置成 - > 开机自启动
  • 50.两数之和(力扣)
  • k8s基础
  • 【自然语言处理】大模型高效微调:PEFT 使用案例
  • FFmpeg将编码后数据保存成mp4
  • 设置VsCode 将打开的多个文件分行(栏)排列,实现全部显示
  • Vue.js2+Cesium1.103.0 六、标绘与测量
  • 【redis 延时队列】使用go-redis的list做异步,生产消费者模式
  • 激光焊接塑料多点测试全画面穿透率测试仪
  • 用 Uno 当烧录器给 atmega328 烧录 bootloader
  • spring boot策略模式实用: 告警模块为例
  • Camunda 7.x 系列【10】使用 Rest API 运行流程实例
  • Python-OpenCV中的图像处理-边缘检测