大一新生的作业(洛谷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 ...
随机推荐
- VS Code侧边栏的“资源管理器”丢了
选择"查看"下的"命令面板" 输入:View: Reset View Locations 所有的视图会恢复到默认的位置.
- 文字转语音 - 搭建微软tts整合web服务提供api接口(免费)
微软tts是业界公认文字转语音效果最佳本文使用docker搭建微软tts服务并提供api接口对外提供服务对接官方免费在线体验接口,搭建后可免费进行调用使用,不保证永久稳定可用 调用方式url:http ...
- 电源电路E24系列反馈电阻计算表格
可调电源,包括DCDC.LDO电路的设计中,经常需要计算反馈电阻进行选型.为了提高效率,优化选型采购,抽空做了个表格进行快速计算. 1.一般反馈电阻电路如下. 输出电压公式为:Vout=Vfb*(Rh ...
- 解决TrueNAS中Smb共享文件路径不区分大小写的问题
问题 在Truenas中, 默认的smb文件分享中, 文件夹是不区分大小写的. 这在一些情况下会导致无法重命名等问题, 严重时可能会造成拷贝文件时的全文件夹文件丢失. 这是linux下的情况, 在已存 ...
- 面试必会->Redis篇
01- 你们项目中哪里用到了Redis ? 在我们的项目中很多地方都用到了Redis , Redis在我们的项目中主要有三个作用 : 使用Redis做热点数据缓存/接口数据缓存 使用Redis存储一些 ...
- docker ——网络配置和管理
docker网络基础 了解docker网络 两种docker网络 单主机与多主机的docker网络 网络驱动 网络驱动 介绍 bridge 桥接网络,这是默认的网络驱动程序 host 主机网络 ove ...
- GNU gprof分析C性能
参考 gprof的简单使用-anthony1983-ChinaUnix博客 Top (GNU gprof) (sourceware.org) c - Enable and disable gprof ...
- Atlas快速入门
先说一些废话 之前的公司在数据中台的项目上调研决定启用了Atlas作为我们数据血缘管理的工具,让我给大家写了一份Atlas快速入门的文档,所以在这里我将这篇文档以一个纯新手视角的方式再一次优化,希望能 ...
- kettle从入门到精通 第二十一课 kettle Carte服务器
1.相关配置文件 jdbc.properties保存在simple-jndi目录下,这个文件用来存储JNDI连接对象的连接参数.Kettle可以用JNDI的方式来引用JDBC连接参数,如IP地址.用户 ...
- 编程语言界的丐帮 C#.NET FRAMEWORK 4.6 EF 连接MYSQL
1.nuget 引用 EntityFramework .和 MySql.Data.EntityFramework. EntityFramework 版本:6.4.4,MySql.Data.Entit ...