大一新生的作业(洛谷P1150,1035,1075)
本帖背景:此帖讲解大一新生团队作业 截止日期10-31 17:09
P1150(Peter的烟)
算法简介
本题主要考察的是模拟算法
模拟算法一般考察一些比较基础的题目,它将生活中的实例融合到了编程题中。
具体要求我们只需要跟着题目一步步走即可。
但是我们要注意模拟算法同样也是很容易出错的,尤其是边界上的问题。
代码
#include<iostream>
using namespace std;
int main()
{
int res = 0;//这个是最终答案,也就是最后能换多少根烟,初始值是0
int n,m;//题目所给的烟和多少根能换一只烟
cin >> n >> m;
int k = 0;//k是临时变量,储存每一次操作后的烟头数量
while(n){//以n作为循环条件,n是目前所存的烟
res += n;//刚开始所有的烟
k += n;//烟头数量(因为n根烟已经全部变成了烟头)
n = k / m;//(用k个烟头能换多少根烟,更新n(目前所存的烟)的值)
k -= n * m;//烟头换烟,还剩下的烟头
}
cout << res << endl;
return 0;
}
注意:在c++中常规的除法是整除操作,比如4/3,这两个整型数相除的结果是1,向下取整,而不是1.33333
P1035(级数求和)
算法简介
本题所考察的也是模拟算法,我们只需要跟着题目所要求的公式把程序写出来就能得到正确的答案
注意:题目中所给的公式包含除法,所以我们应该使用浮点数类型使得所模拟的公式更准确
代码
#include<iostream>
using namespace std;
int k;
int main()
{
cin >> k;//题目中所给的k
double m = 1;//公式中的分子都是1。声明变量为浮点数
int p = 1;//既是项数,也是公式中的分母,比如第一项是1,分母也为1
double sum = 0;//为前p-1项的和,刚开始为0
while(sum <= k){//直到前p-1项的和大于题目所给的k就跳出
sum += m / p;//模拟公式
p++;//项数往后递推
}
cout << p - 1<< endl;//由于sum是前p-1项的和,所以最终答案是p-1
return 0;
}
注意:浮点数除法和上一题的整数除法不同,c++中的除法会保留精度
例如在c++中
- 两个整形数相除,答案为整型数 3/4 = 0 4/3 = 1
- 两个数中有1个是浮点数,则要保留精度 如3/4.0 = 0.75 4/3.0 = 1.33
- 两个数都是浮点数,则同上
P1075(质因数分解)
算法简介
本题考察普通的数学。
质数又被称为素数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
题目的大致意思如21 = 3 * 7(3和7显然都是质数)较大的质数是7,所以输出7
显然题目中所给的数除了能分解成两个素数,不可能有其他的因子(因为质数已经不能再分解)
细节思考
由于题目中n的数据范围太大(2*10 ^ 9),而c++一秒只能计算10 ^ 7~8
为了尽可能地不TLE(时间超限),我们需要想一种优化的方法
首先我们知道,只要能找到较小的素数,我们就能找到较大的素数(因为两者的乘积就是n)
其次,较小的那个质数的平方一定会小于等于n
假如较小的质数是x,x * x<=n
利用反证法证明:
已知x * y = n(x是较小的质数,y是较大的质数)
假设x * x>n 而x < y
根据不等式的传递性 n < x * x < x * y
由于x * y=n 则会出现n < n的矛盾
假设不成立
所以x * x <= n
这样我们的时间复杂度被大大优化了
代码
#include<iostream>
using namespace std;
int n;
int main()
{
cin >> n;//如题意
for(int i = 2; i <= n/i; ++i)//最小的素数从2开始,i<=n/i等价于i * i <= n,像我们刚才证明的那样
if(n % i == 0) {//如果这个数能被整除,说明这个数是较小的质数
cout << n / i << endl; //把另一个较大的质数输出
return 0;//直接结束程序
}
return 0;
}
大一新生的作业(洛谷P1150,1035,1075)的更多相关文章
- 集训作业 洛谷P1101 单词方阵
这个题的长度真的有点长,我直接放图片吧 这个题又是一个和谐的搜索,找到yizhong的y就开始8面搜索,遇见正确的字母就继续搜索,不正确就果断放弃,果然又是一个和谐的搜索呢. #include< ...
- 集训作业 洛谷P1010 幂次方
这个…… 这个题看上去有点难的样子. 仔细看看,感觉有点简单.啊,是递归啊,正经的看一看,好像是把一个数分成2的几次方的和. 然后余数和比他小的最大的2的次方数如果不是2的一次方或者2的0次方,就继续 ...
- 集训作业 洛谷P1135 奇怪的电梯
这个题我见过!!! 我之前在石油大学的网站上做练习赛,提高了很多,这个题是我第一次在比赛里见到深搜. 当时蒙蔽的一批,现在发现好简单…… 这个题和普通的深搜没什么区别,甚至可以说简单了,因为这个是1维 ...
- 集训作业 洛谷P1433 吃奶酪
嗯?这题竟然是个绿题. 这个题真的不难,不要被他的难度吓到,我们只是不会计算2点之间的距离,他还给出了公式,这个就有点…… 我们直接套公式去求出需要的值,然后普通的搜索就可以了. 这个题我用的深搜,因 ...
- 集训作业 洛谷P1443 马的遍历
这个题是个搜索,而且有是最少的步数,肯定就是广搜啦,不知道为什么的同学先去学习一下广搜吧. 养成好习惯,看见最少步数就去想想广搜(只是我自己觉得) 竟然这个题可以如此顺畅的想到广搜,感觉不难啊,但还有 ...
- 集训作业 洛谷P1032 字串变换
集训的题目有点多,先写困难的绿题吧(简单的应该想想就会了) 嗯,这个题看起来像个搜索呢(就是个搜索) 我们仔细想想就知道这个题肯定不能用深搜,可以优化的地方太少了,TLE是必然的. 那我们该怎么办呢? ...
- 集训作业 洛谷P3913 车的攻击
这个题一开始被我想复杂了,但总体差不多. 脑子清醒后我直接看他占领了几条长,几条宽,比如一个长3宽3的地图. 被占领了一条宽,就可以看成一个长3宽2的地图.这个长3宽2的地图就是出去可以被攻击的点剩下 ...
- 集训作业 洛谷P1866 编号
这个题是个数学题啊. 总体思路不是很难,每个兔子有一个编号,只要不停的看下一个兔子有多少可选编号,再乘上之前的所有可能性就可以算出一共的编号方法. #include<iostream> # ...
- 集训作业 洛谷P1017 进制转换
这个题的题目真的太恶心了. 重点是他的题目描述和他的目标没啥关系. 和最终目的有关系的只有这么一句话:”输出此负进制数及其基数,若此基数超过10,则参照16进制的方法处理.“ 我们通过看这句话可以发现 ...
- 集训作业 洛谷P1100 高低位交换
这个题简单来说就是把一个数转成32位的2进制数,不够的补0.然后把这个数的前半部分和后半部分互换,再计算结果. 思路简单明了,接下来是代码: #include<iostream> #inc ...
随机推荐
- C语言:将有顺序的数组进行逆序排序
//设计逆向排序之,数字有序排列,进行逆向排序 主要思想就是头和尾进行交换,前提是------数字必须是排好序的才能进行逆序排 /*假设数组为: 7,8,9,10,11 1 N ...
- ASP.NET Core如何禁用模型验证(或者从模型状态中移除某些属性)?
这是一篇4年前的文章:[经验分享]在ASP.NET Core中,如果禁用某个请求的模型验证? 事隔多年,又有网友问到这个问题.我就来重新整理一下,顺便扩展一下之前的解决办法. ===== 这是一个来自 ...
- FFmpeg开发笔记(二十二)FFmpeg中SAR与DAR的显示宽高比
<FFmpeg开发实战:从零基础到短视频上线>一书提到:通常情况下,在视频流解析之后,从AVCodecContext结构得到的宽高就是视频画面的宽高.然而有的视频文件并非如此,如果按照A ...
- 提升WordPress网站加载速度的8个小技巧
提升WordPress网站加载速度是至关重要的,它不仅可以提高用户体验,还有助于SEO排名.以下是提升WordPress网站加载速度的8个小技巧,希望能帮助到大家. 优化图片: 使用适当大小和格式的图 ...
- 京东面试:SpringBoot同时可以处理多少请求?
Spring Boot 作为 Java 开发中必备的框架,它为开发者提供了高效且易用的开发工具,所以和它相关的面试题自然也很重要,咱们今天就来看这道经典的面试题:SpringBoot同时可以处理多少个 ...
- C# wpf 实现截屏框实时截屏功能
wpf截屏系列第一章 使用GDI+实现截屏第二章 使用DockPanel制作截屏框第三章 实现截屏框实时截屏(本章)第四章 使用ffmpeg命令行实现录屏 文章目录wpf截屏系列前言一.实现步骤1.获 ...
- 深入探讨Function Calling:在Semantic Kernel中的应用实践
引言 上一章我们熟悉了 OpenAI 的 function calling 的执行原理,这一章节我们讲解一下 function calling 在 Semantic Kernel 的应用. 在Open ...
- docker创建容器数据持久化资源限制基础命令
1. docker简介和核心概念 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化.容器是完全使 ...
- zabbix笔记_003 配置微信告警
配置邮件告警 安装python-requests,使用微信发送告警 发送告警报错: yum install -y python-requests 测试告警: cat weixin.py #------ ...
- k8s——kubctl命令基础
语法 kubevtl [command] [type] [name] [flags] command: 指定要对一个或多个资源执行的操作,例如,`create`,`get`,`describe`,`d ...