首页 > 其他分享 >PTA 函数与递归部分题目讲解及思路

PTA 函数与递归部分题目讲解及思路

时间:2023-10-18 21:58:45浏览次数:33  
标签:10 递归 int 质数 PTA 素数 讲解 include sum

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";
}

求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;
}

标签:10,递归,int,质数,PTA,素数,讲解,include,sum
From: https://www.cnblogs.com/orangecodelog/p/17773307.html

相关文章

  • STM32 ADC基础知识讲解
    (文章目录)前言在正式的学习如何编写ADC代码时我们先来学习一下ADC的基础知识部分,只有掌握好了这些基础知识才能顺利的进行后面的代码编写。一、ADC的基本介绍ADC指的是模数转换器(Analog-to-DigitalConverter),它是一种用于将模拟信号转换为数字信号的电子设备或电路。模拟信......
  • Go泛型全面讲解:一篇讲清泛型的全部
    @目录序言1.一切从函数的形参和实参说起2.Go的泛型3.类型形参、类型实参、类型约束和泛型类型3.1其他的泛型类型3.2类型形参的互相套用3.3几种语法错误3.4特殊的泛型类型3.5泛型类型的套娃3.6类型约束的两种选择3.7匿名结构体不支持泛型4.泛型receiver4.1基于泛型的队......
  • kubeadm init 报错ERROR FileContent--proc-sys-net-bridge-bridge-nf-call-iptables
    现象:[ERRORFileContent--proc-sys-net-bridge-bridge-nf-call-iptables]:/proc/sys/net/bridge/bridge-nf-call-iptablescontentsarenotsetto1原因:  /proc/sys/net/bridge/bridge-nf-call-iptables 文件的内容并没有设置为1解决方案echo"1">/proc/sys/net/br......
  • 递归之斐波那契数列,爬楼梯问题
    什么是递归呢?一个大的问题f(n)可以被拆解为小一点的问题f(n-1)和f(n-2),……直到然后拆到最小的问题f(1)和f(2)。很多人把从大往小算的形式称作递归我们用一个题目引入:假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以......
  • 首页database SQL Server异常代码处理的深入讲解
    SQLServer异常代码处理的深入讲解在SQLServer中,异常代码处理(ExceptionHandling)是非常重要的技术之一。良好的异常处理可以帮助我们更好地处理运行中的错误,保障系统的稳定性和安全性。本文将深入讲解SQLServer异常代码处理,包括常见的异常类型、异常处理方式及异常处理的最......
  • 4种过压保护电路讲解,过压保护原理+过压保护电路原理+过压保护电路构建,通俗易懂
    大家好,我是李工,创作不易,希望大家多多支持我。今天给大家分享的是:过压保护、过压保护原理、过压保护电路。一、过压保护是什么意思?过压保护是一种电源功能,当输入电压超过预设值时会切断电源,为了防止高压浪涌,通常会一些过压保护方法。大多数电源都使用过电压保护电路来防止损坏电......
  • MounRiver工程配置讲解总结
    MRS配置汇总:1.MounRiver工程配置讲解一(添加全局宏定义)2.MounRiver工程配置讲解二(将灰色库的文件参与或排除编译)3.MounRiver工程配置讲解三(打印转行符和浮点数)4.MounRiver工程配置讲解四(报警告thereisahole)5.MounRiver工程配置讲解五(const变量地址不在flash中)6.......
  • iptables 正常用法
    #!/bin/baship1=${group_host1}ip2=${group_host2}ip3=${group_host3}ip4=${group_host4}ip5=${group_host5}iptables-F#清空所有的防火墙规则iptables-X#删除用户自定义的空链iptables-Z#清空计数iptables-AINPUT-ptcp--dport22-jACCEPTiptables-AIN......
  • 麒麟v10 SP3上的19c rac,optachauto安装补丁出错
    1、麒麟V10SP3上新安装的一套19cRAC,在使用opatchauto打补丁时报错,具体信息如下所示。[root@db01soft]#/u01/app/19.3.0/grid/OPatch/opatchautoapply/soft/35037840/ OPatchautosessionisinitiatedatTue0ct1011:04:452023 Systeminitializationlogfi......
  • cpu亲和性相关函数和宏 基础讲解[cpu_set_t]
    cpu亲和性相关函数和宏讲解:写在前面:我在查找关于linuxcpu宏函数没看到有对宏函数基础的、详细的讲解,笔者便通过官方文档入手,对次进行的翻译和理解希望能帮到对这方面宏有疑惑的读者explain:/elem/表示为elem变量,这样子便于区分P.S:#include<sched.h>动态范围cpu设置......