PTA 函数与递归部分题目讲解及思路
7-1 判断素数
题目分析
题目输入n个数,判断其是否为质数
对于判断质数,只需要满足从2开始遍历的每一个数一直到√n均无法被n整除即可
关于为什么只要到√n呢?
因为n = √n * √n,因此其最大的因数不会超过√n,因此可以优化减少不必要的循环
AC Code
#include<iostream>
#include<cmath>
using namespace std;
bool is_prime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
int main()
{
int n,t;
cin >> n;
while(n--)
{
cin>>t;
if(is_prime(t)) cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
}
7-2 求幂之和
题目分析
按照题目所给的公式计算即可
代码思路及优化思路
可以使用do-while结合--n优化代码
AC Code
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int n,sum=0;
cin >> n;
do
{
sum += pow(2,n);
}while(--n);
cout<<"result = "<<sum;
}
7-3 近似求PI
题目分析
按照题目给的公式计算即可
AC Code
#include <cstdio>
#include <iostream>
using namespace std;
int main()
{
double eps;
cin >> eps;
double sum=1;
double t=1;
for(int i=1;t>eps;i++)
{
t = t*i/(2*i+1);
sum += t;
}
printf("PI = %.5f\n", 2*sum);
return 0;
}
7-4哥德巴赫猜想
题目分析
首先,我们需要验证的是一个偶数是否可以拆分成两个质数的和,而且题目中明确表示,答案应当由拆分出多组结果中的一个最小的质数和一个最大的质数组成的结果
例如 24 = 5 + 19 = 7 + 17
由于 5 + 19为最大质数和最小质数,因此取改组作为最终答案输出
代码思路及优化思路
首先获取一个输入的偶数n,由于需要取最大和最小的质数,因此我们直接从最小的质数开始向后遍历,只需要判断n-i是否也为质数,如果成立,则i为最小质数,n-i为最大质数,作为答案直接输出即可
AC Code
#include <iostream>
#include <cmath>
using namespace std;
bool is_prime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
int main()
{
int n;
cin >> n;
for(int i=2;i<n;i++)
{
if(is_prime(i))
{
if(is_prime(n - i))
{
cout << n <<" = "<<i<<" + "<<n-i;
return 0;
}
}
}
}
7-5Jack cheng的烦恼3
题目分析
首先,题目给出了真素数的条件,及本身为素数的前提,同时保证各个位上的和也为质数,因此我们首先要判断给出的数是否为素数,然后将每一位取出,并且存放进容器中,然后求和再次判断和是否也为素数
例如 11为真素数
由于11本身为素数,同时各个位之和1+1=2也为素数,因此它为真素数
相反,例如13,虽然本身为素数,但是各个位数之和1+3=4不为素数,因此他不是真素数
代码思路及优化思路
首先获取一个输入的数n,利用函数isturePrime来判断是否为真素数
关于如何获取n的每一位的思路:因为n是整数,因此n%10即可得到其个位数,我们将其存入vector中(一种特殊的数组),然后n/=10,由于原数n为整数,因此n/10之后会舍弃个位的余数,得到新的数,如此反复即可得到n的每一位,直到n为0为止
例如 123
123 % 10 = ***3***
123 / 10 = 12
12 % 10 = ***2***
12 / 10 = 1
1 % 10 = ***1***
1 / 10 = 0(至此停止循环)
AC Code
#include <bits/stdc++.h>
using namespace std;
bool is_prime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
bool isturePrime(int u)
{
int sum = 0;
int n = u;
vector<int> wei;
while(n != 0)
{
wei.push_back(n % 10); //依次取出n的每一位
n /= 10; //舍去去除的位数
}
for(int i:wei)
{
sum+=i;//对取出的每一位求和
}
return is_prime(u)&&is_prime(sum);//如果本身为质数且各个位之和为质数,即为真素数
}
int main()
{
int n;
cin >> n;
if(isturePrime(n))
cout<<"yes";
else
cout<<"no";
}
7-6求n以内最大的k个素数以及它们的和
题目分析
首先,题目要求计算并输出不超过n的最大的k个素数以及它们的和,若n以内不够k个素数,则按实际个数输出
代码思路及优化思路
首先,程序结束有两个条件即n范围内所有质数不足k个则输出所有范围内实际存在的质数,或者质数(从大到小)的个数达到k,满足其一即可,所以可以把k看成质数的名额,因此我们可以利用while(n--&&k)优雅的判断结束
在代码中,n为迭代器,从输入的范围开始由大到小向0开始遍历,k为质数个数,只要找到一个符合条件的n,则k--(即占了一个名额),同时,我们每找到一个质数就直接输出一次,然后再将他累加到和sum中即可
循环结束后,只需要输出‘=’+sum即可
AC Code
#include <bits/stdc++.h>
using namespace std;
bool is_prime(int num) {
if (num <= 1) {
return false;
}
for (int i = 2; i <= sqrt(num); i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
int main()
{
int n,k,sum=0;
bool first = true;
cin >> n >> k;
while(n-- && k)
{
if(is_prime(n))
{
k--;
sum += n;
if(!first) //判断是否为第一次输出,因为第一次输出不需要输入加号+,之后的每次输出之前都用加号连接两个数
{
cout<<"+";
}else first = false;
cout<<n;
}
}
cout<<"="<<sum;
}
PTA 函数与递归部分题目讲解及思路的更多相关文章
- C51函数的递归调用
前几天在写C51程序时用到了递归,简单程序如下: void WRITE_ADD(uchar addr,uchar wbyte) { START(); //先发送起始信号 WRITE_BYTE(0xa0 ...
- 莫队浅谈&题目讲解
莫队浅谈&题目讲解 一.莫队的思想以及莫队的前置知识 莫队是一种离线的算法,他的实现借用了分块的思想.在学习莫队之前,本人建议学习一下分块,并对其有一定的理解. 二.莫队 现给出一道例题:bz ...
- python3 函数的形参、实参、位置参数、默认参数、关键字参数以及函数的递归
python 版本 3.5 #Author by Andy#_*_ coding:utf-8 _*_def func(x,y=2): print('我是形参%s'%x) print('我是默认参y-- ...
- C笔记01:关于printf函数输出先后顺序的讲解
关于printf函数输出先后顺序的讲解!! 对于printf函数printf("%d%d\n", a, b);函数的实际输出顺序是这样的先计算出b,然后再计算a,接着输出a,最后再 ...
- Day3 - Python基础3 函数、递归、内置函数
Python之路,Day3 - Python基础3 本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8. ...
- 你好,C++(27)在一个函数内部调用它自己本身 5.1.5 函数的递归调用
5.1.5 函数的递归调用 在函数调用中,通常我们都是在一个函数中调用另外一个函数,以此来完成其中的某部分功能.例如,我们在main()主函数中调用PowerSum()函数来计算两个数的平方和,而在P ...
- [C++程序设计]函数的递归调用
在调用一个函数的过程中又出现直接或间接地调用 该函数本身,称为函数的递归(recursive)调用. 包含递归调用的函数称为递归函数. 在实现递归时,在时间和空间上的开销比较大 求n! #includ ...
- 利用php函数mkdir递归创建层级目录
项目开发中免不了要在服务器上创建文件夹,比如上传图片时的目录,模板解析时的目录等.这不当前手下的项目就用到了这个,于是总结了几个循环创建层级目录的方法. php默认的mkdir一次只能创建一层目录,而 ...
- Python基础之内置函数和递归
一.内置函数 下面简单介绍几个: 1.abs() 求绝对值 2.all() 如果 iterable 的所有元素都为真(或者如果可迭代为空),则返回 True 3.any() 如果 iterable 的 ...
- 16汇编第十讲完结Call变为函数以及指令的最后讲解
16汇编完结Call变为函数以及指令的最后讲解 学了10天的16位汇编,这一讲就结束了,这里总结一下昨天的LOOP指令的缺陷,因为lOOP指令的缺陷,所以我们都改为下面的汇编代码使用了,自己去写,其中 ...
随机推荐
- OpenCASCADE 显示对象设置不可选中
原有的选中模式代码: static Standard_Integer SelectionMode (const TopAbs_ShapeEnum theShapeType) { switch (the ...
- Record -「CSP-S 2020」赛后总结
其实这次的 CSP 暴露出来了很多问题. 比如策略上的,在 T1 花了太多的时间直接心态爆炸,后面的题只想着把暴力打满.看到 T2 只想着打暴力,根本没有沉下心来想,白白丢了一道(水)题. T3 连暴 ...
- 整理php防注入和XSS攻击通用过滤
对网站发动XSS攻击的方式有很多种,仅仅使用php的一些内置过滤函数是对付不了的,即使你将filter_var,mysql_real_escape_string,htmlentities,htmlsp ...
- 中华人民共和国企业所得税月(季)度预缴纳税申报表(A类,2018年版)
企业按照<中华人民共和国公司法>有关规定整体改制,包括非公司制企业改制为有限责任公司或股份有限公司,有限责任公司变更为股份有限公司,股份有限公司变更为有限责任公司,原企业投资主体存续并在改 ...
- 11G手动建库
◆◆◆11G手动建库◆设置环境变量export ORACLE_BASE=/u01/app/oracleexport ORACLE_HOME=/u01/app/oracle/product/11.2.4 ...
- buffer busy waits等待事件案例-vage
转自vage 讨厌香草冰激凌的汽车与Buffer busy wiats的故事 记得好几年前看到过一个故事,通用公司曾收到一客户的邮件,邮件中客户描述了一个非常奇怪的问题.他们家有晚饭后去 ...
- jmeter生成HTML性能测试报告(非GUI的命令)
非GUI的命令(在cmd执行即可 不需要打开jmeter) 使用命令:jmeter -n -t [jmx file] -l [jtl file] -e -o [report path ...
- 文心一言 VS 讯飞星火 VS chatgpt (116)-- 算法导论10.3 1题
一.用go语言,画图表示序列(13,4,8,19,5,11),其存储形式为多数组表示的双向链表.同样画出单数组表示的形式. 文心一言: 在Go语言中,我们无法直接画图,但我可以帮助你描述如何使用Go语 ...
- 大语言模型基础-Transformer模型详解和训练
一.Transformer概述 Transformer是由谷歌在17年提出并应用于神经机器翻译的seq2seq模型,其结构完全通过自注意力机制完成对源语言序列和目标语言序列的全局依赖建模. Trans ...
- 搭建LNMP
搭建LNMP 准备(关闭防火墙,selinux) systemctl stop firewalld systemctl disable firewalld setenforce 0 安装依赖包( ...