大一新生的作业(洛谷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 ...
随机推荐
- 传统css布局方案(position,float,line-height等配合)
一.display display 是 css 布局中很重要的一个属性,它定义了元素生成的显示框类型,常见的几个属性值有:block.inline.inline-block.inherit.none. ...
- 防止XSS(跨站脚本攻击)漏洞
点击查看代码 - 输入验证和过滤:对于用户输入的数据,进行严格的验证和过滤.可以使用正则表达式或其他验证方式,确保输入的数据符合预期的格式和内容.同时,对于特殊字符进行转义处理,防止恶意代码的注入. ...
- java学习之旅(day.11)
static详解 static若在类中使用,就是修饰成员变量 static若在方法中使用,就是成员方法? static加在方法上叫静态方法,加在属性上叫做静态属性 package com.zhang. ...
- 基于webapi的websocket聊天室(三)
上一篇处理了超长消息的问题.我们的应用到目前为止还是单聊天室,这一篇就要处理的多聊天室的问题. 思路 第一个问题,怎么访问不同聊天室 这个可以采用路由参数来解决.我把路由设计成这样/chat/{roo ...
- 【c#】JavaScriptSerializer 不序列化null值
首先引用dll :System.Web.Extensions. 再自定义转换器代码如下: public class JavaScriptSerilizeConvert : JavaScriptConv ...
- JDK动态代理的深入理解
引入代理模式 代理模式是框架中经常使用的一种模式,动态代理是AOP(面向切面编程)思想的一种重要的实现方式,在我们常用的框架中也经常遇见代理模式的身影,例如在Spring中事务管理就运用了动态代理,它 ...
- .netz 压缩 打包 成单EXE
https://github.com/madebits/msnet-netz-compressor https://madebits.github.io/#r/msnet-netz-compresso ...
- 【工作记录】JDBC连接MySQL,跨时区调查CST转Asia/Shangha
根据业务要求,不同的国家设置jvm参数,来确定当前时区. // -Duser.timezone=Asia/Kolkata 印度加尔各答 GMT+05:30 // -Duser.timezone=Asi ...
- k8s——pod的yaml文件
理解什么是pod pod基于deployment创建,删除deployment,pod也会被删除 基础pod的yaml文件的资源清单 点击查看列表 | 参数名 | 类型 | 字段说明 | | ---- ...
- System.lineSeparator()行分隔符的用法
System.lineSeparator()具体含义 从JDK的源码中,可以看出:它是从JDK1.7之后开始有的这个方法. 在UNIX系统下,System.lineSeparator()方法返回&qu ...