假期刷题打卡--Day18

1、MT1168阶乘数

输入正整数N,找出它是否是一个等于其他数的阶乘值的数,输出YES或者NO。

格式

输入格式:

输入正整数N

输出格式:

输出YES或者NO

样例 1

输入:

5

输出:

NO
相关知识点
阶乘

可以理解为:小于等于某个正整数的所有正整数的乘积。

例如:5 的阶乘(记作 5!)= 5 × 4 × 3 × 2 × 1

1到10的阶乘数如下:

1! = 1

2! = 2 × 1 = 2

3! = 3 × 2 × 1 = 6

4! = 4 × 3 × 2 × 1 = 24

5! = 5 × 4 × 3 × 2 × 1 = 120

6! = 6 × 5 × 4 × 3 × 2 × 1 = 720

7! = 7 × 6 × 5 × 4 × 3 × 2 × 1 = 5040

8! = 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1 = 40320

9! = 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1 = 362880

10! = 10 × 9 × 8 × 7 × 6 × 5 × 4 × 3 × 2 × 1 = 3628800

阶乘数(与本题无关,仅供了解)

(来自百度百科      阶乘数_百度百科 (baidu.com))

定义:阶乘数是一种有着特殊规律、每位以阶乘为权的数字。

公式:abcd=a*a!+b*b!+c*c!+d*d! 。即:该数据的值等于各个位上数字乘以其阶乘数之和。

        例:

分析过程

         这里判断的是阶乘值,而不是阶乘数,不要因为这个题目被忽悠了。我看到这个题目我就去搜了一下什么是阶乘数,然后怎么想都觉得不太合适,怎么都计算不出正确结果,然后我就看了一下别人的思路,发现是求的某个数阶乘的值,查看是否是某个数的阶乘。就比如说,如果输入1,就是1的阶乘值;输入2,可以认为是2的阶乘(2*1=2);输入6,就是3的阶乘值(3*2*1=6)等等。

         所以说,这个题就是去查看输入的数是否是某个数的阶乘。

如果用例不多的话,可以直接按照常见的几个阶乘排除即可。

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    if(n==1||n==2||n==6||n==24||n==120||n==720){
        cout << "YES";
    }else{
        cout << "NO";
    }

    return 0;
}

也可以使用循环结构一一查看。

实现思路:首先,设置一个总数,sum=1(用来计算阶乘值),再设置一个flag(用来判断是否有满足条件的sum,即sum==n),设置初值为0,然后设置一个循环(while循环或者for循环),在循环里面判断输入值是否满足条件。

实现代码
#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n,sum=1,flag=0;
    cin >> n;
    for(int i=1;sum<=n;i++){//也可以是i<=n
        sum*=i;
        if(sum==n){
            cout << "YES";
            flag = 1;
            break;
        }
    }
    if(flag==0){
        cout << "NO";
    }
    return 0;
}
#include<bits/stdc++.h> 

using namespace std;

int main( )
{

    int n,x=1,c=1;
    cin >> n;
    // cout << n << "$$";
    while(c<n){
        x++;
        c*=x;
        // cout << c << "*" << x << "dd";
    }
    if(c==n){
        cout << "YES";
    }
    else
        cout << "NO";
    return 0;
}

2、MT1170四叶玫瑰数

输入正整数N,判断它是不是一个四叶玫瑰数,输出YES或者NO。四位玫瑰数是4位数的自幂数,它的每个位上的数字的4次幂之和等于它本身。

格式

输入格式:

输入正整数N

输出格式:

输出YES或者NO

样例 1

输入:

1634

输出:

YES
相关知识点
自幂数:

定义:指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。

例如:当n为3时,有1^3 + 5^3 + 3^3 = 153,153即是n为3时的一个自幂数

0到9是自幂数,但是不是四页玫瑰树。

分析过程

 此题就是要判断输入数是否等于它每个位上n次方的平方,这里n是4。

例:

1634就是去判断1634是否等于1的4次方+6的4次方+3的4次方+4的次方。

所以,按照上述思路,第一次写的代码:
 

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
//这里求输入数的每个数的4次幂,第二三四位不仅需要使用除法解决,还要用求余来求出
    int m = (pow(n/1000,4)+pow(n/100%10,4)+pow(n/10%10,4)+pow(n/1%10,4));
    if(n==m){
        cout << "YES";
    }else{
        cout << "NO";
    }
    return 0;
}

 但是,上面代码只能通过一个用例:

按照评论区的想法,加一个判断语句,也只能过两个用例:

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    int m;
    if(n>999 && n<10000)
        m = (pow(n/1000,4)+pow(n/100%10,4)+pow(n/10%10,4)+pow(n/1%10,4));
    if(n==m){
        cout << "YES";
    }else{
        cout << "NO";
    }
    return 0;
}

 然后,继续修改:

发现,没有考虑到0这个特殊情况(也可以说没有考虑到不是四位数的自幂数),所以,就在判断的时候加上n!=0就可以通过了(不过这个可能是凑巧通过了这道题的用例,放到其他用例上有可能还是不太正确),所以,要在考虑的时候查看输入值是否是四位数,如果是,则按照自幂数的方式进行计算看是否满足条件,如果不是,则直接输出NO,并结束(若不结束,则可能会出现继续往下面判断的情况,即有可能输出NOYES,或者其他情况)。

实现代码
#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    int m;

    if(n>999 && n<10000)
        m = (pow(n/1000,4)+pow(n/100%10,4)+pow(n/10%10,4)+pow(n%10,4));
    if(m==n && n!=0){
        cout << "YES";
    }else{
        cout << "NO";
    }
    return 0;
}

或者:

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    int m;

    if(n>999 && n<10000){
    	m = (pow(n/1000,4)+pow(n/100%10,4)+pow(n/10%10,4)+pow(n%10,4));
	}else{
		cout << "NO";
		return 0;
	}  
    if(m==n ){
        cout << "YES";
    }else{
        cout << "NO";
    }
    return 0;
}

不过,一个代码尽量不要出现多个出口,所以直接把判断语句写到上面就可以了。

#include<bits/stdc++.h> 

using namespace std;

int main( )
{
    int n;
    cin >> n;
    int m;

    if(n>999 && n<10000){
    	m = (pow(n/1000,4)+pow(n/100%10,4)+pow(n/10%10,4)+pow(n%10,4));
        if(m==n ){
            cout << "YES";
        }else{
            cout << "NO";
        }
	}else{
		cout << "NO";
	}     
    return 0;
}

明天继续吧。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/359150.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[Tcpdump] 网络抓包工具使用教程

往期回顾 海思 tcpdump 移植开发详解海思 tcpdump 移植开发详解 前言 上一节&#xff0c;我们已经讲解了在海思平台如何基于静态库生成 tcpdump 工具&#xff0c;本节将作为上一节的拓展内容。 一、tcpdump 简介 「 tcpdump 」是一款强大的网络抓包工具&#xff0c;它基于…

petalinux2022.2启动文件编译配置

安装必要运行库: sudo apt-get install iproute2 gawk python3 python sudo apt-get install build-essential gcc git make net-tools libncurses5-dev tftpd sudo apt-get install zlib1g-dev libssl-dev flex bison libselinux1 gnupg wget git-core diffstat sudo apt-ge…

Lucene 查询原理

Lucene 查询原理 - 知乎 前言 Lucene 是一个基于 Java 的全文信息检索工具包&#xff0c;目前主流的搜索系统Elasticsearch和solr都是基于lucene的索引和搜索能力进行。想要理解搜索系统的实现原理&#xff0c;就需要深入lucene这一层&#xff0c;看看lucene是如何存储需要检…

kafka集群搭建需要做的事情

首先&#xff0c;虚拟机克隆好之后的步骤如下&#xff1a; 1. 修改IP、主机名&#xff0c;关闭防火墙&#xff1b;&#xff08;reboot重启&#xff09; 2. 在/etc/hosts文件中进行IP与主机名的映射配置&#xff0c;集群中每天都记得配置&#xff1b; 3. 安装JDK并进行分发&a…

基于Matlab无刷直流电机系统仿真建模的新方法

摘 要&#xff1a;在分析无刷直流电机&#xff08;BLDC&#xff09;数学模型的基础上&#xff0c;提出了无刷直流电机系统仿真建模的 新方法。在Matlab/Simulink 中&#xff0c;建立独立的功能模块&#xff0c;如BLDC 本体模块、电流滞环控制模块、 速度控制模块等&#xff0c;…

漏洞原理文件上传漏洞

一 文件上传漏洞介绍&#xff08;理论&#xff09; 文件上传漏洞是一种常见的web应用程序漏洞&#xff0c;允许攻击者向服务器上传恶意文件。这种漏洞可在没有恰当的安全措施的情况下&#xff0c;将任意类型的文件上传到服务器上&#xff0c;从而可能导致以下安全问题&#xff…

centos7安装mysql5.7 或者mysql8

1、centos7安装mysql8 mysql官网 https://dev.mysql.com/downloads/mysql/ 示例2个版本的下载地址 #5.7.30下载地址 wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar #8.0.22下载地址 wget https://cdn.mysql.com/archives/mysql-8…

响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-5 Canvas 绘制三角形

代码 <!doctype html> <html> <head> <meta charset"utf-8"> <title>Canvas 绘制三角形</title> </head><body><canvas id"cavsElem">您的浏览器不支持Canvas&#xff0c;请升级浏览器</canvas…

03:华为云管理|云主机管理|云项目实战

华为云管理&#xff5c;云主机管理&#xff5c;云项目实战 安全组配置部署跳板机配置yum源&#xff0c;安装软件包优化系统服务安装配置ansible管理主机 模版镜像配置配置yum源&#xff0c;安装软件包优化系统 网站云平台部署实战华为云的负载均衡 安全组配置 设置安全组 云…

2分钟快速了解!全网最详细的性能测试教程之【Redis 简介和安装】

本篇文章主要介绍基于Redis的的简介和安装&#xff0c;其中参考了许多大佬写的文章&#xff0c;算是做一个Redis的基础教程吧。 Redis 简介 Redis 是完全开源的&#xff0c;遵守 BSD 协议&#xff0c;是一个高性能的 key-value 数据库。 Redis 与其他 key - value 缓存产品有…

AI嵌入式K210项目(24)-口罩检测

文章目录 前言一、实验准备二、实验过程三、实验结果总结 前言 本节课主要学习口罩检测功能&#xff0c;将摄像头采集的画面分析&#xff0c;比对模型&#xff0c;分析是否佩戴口罩&#xff0c;打印出佩戴口罩的状态 一、实验准备 请先将模型文件导入内存卡上&#xff0c;再…

【开源】SpringBoot框架开发天然气工程业务管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、使用角色3.1 施工人员3.2 管理员 四、数据库设计4.1 用户表4.2 分公司表4.3 角色表4.4 数据字典表4.5 工程项目表4.6 使用材料表4.7 使用材料领用表4.8 整体E-R图 五、系统展示六、核心代码6.1 查询工程项目6.2 工程物资…

AutoDL----VScode远程ssh连接

1、首先安装ssh插件 首先安装插件&#xff0c;在商店里抖索remote-ssh 2、建立连接 安装完成后在插件栏就会看到远程连接这一栏 点击添加后会让你输入ssh的地址&#xff0c;直接复制AutoDL的&#xff0c;按下Enter&#xff0c;选择第一个配置文件 选择Linux平台 继续后…

第九节HarmonyOS 常用基础组件19-CheckboxGroup

1、描述 多选框群组&#xff0c;用于控制多个选框全选或者全不选状态。 2、接口 CheckboxGroup(options?: {group?: string}) 3、参数 参数名 参数类型 必填 描述 group string 否 群组名称 4、属性 selectAll - boolean - 设置是否全选&#xff0c;默认值&…

springboot整合日志处理Logback

引言 ​ springboot框架 集成日志 logback 日志 ​ Logback是由log4j创始人设计的又一个开源日志组件。目前&#xff0c;logback分为三个模块&#xff1a;logback-core&#xff0c;logback-classic和logback-access。是对log4j日志展示进一步改进! 日志的级别 All < Trace…

CHS_04.2.3.3+互斥锁

CHS_04.2.3.3互斥锁 进程互斥&#xff1a;锁 接下来 用于实现互斥的一种方法 你可以简单理解为 锁就是一个bool的变量 进程互斥&#xff1a;锁 只有true和false或者零和一两种状态分别表示当前已上锁或者没有上锁 有这样的两个函数可以操作锁acquire 这个函数就是上锁获得 锁…

软硬兼施:亚信安慧AntDB创造更多可能性

亚信安慧AntDB是一种极具适配能力的数据库系统&#xff0c;它不仅在软件方面拥有出色的适应性&#xff0c;还能与国产硬件紧密配合&#xff0c;实现高效稳定的运行。无论是在上游还是下游领域&#xff0c;亚信安慧AntDB都展现出了卓越的适配程度。 在软件方面&#xff0c;亚信安…

防御保护常用知识

防火墙的主要职责在于&#xff1a;控制和防护 --- 安全策略 --- 防火墙可以根据安全策略来抓取流量之 后做出对应的动作 防火墙分类主要有四类&#xff1a; 防火墙吞吐量 --- 防火墙同一时间能处理的数据量多少 防火墙的发展主要经过以下阶段&#xff1b; 传统防火墙&#xf…

105.乐理基础-五线谱-谱号扩展

内容参考于&#xff1a;三分钟音乐社 上一个内容&#xff1a;104.乐理基础-五线谱-中音谱号、次中音谱号-CSDN博客 上一个内容里练习的答案&#xff1a; 首先高音谱号&#xff08;G谱号&#xff09;是从第二线开始画的&#xff0c;但是它只能从第二线开始画吗&#xff1f;并不…

nvm 工具使用介绍

目录 1.背景2.nvm介绍3.下载和安装4.配置环境变量5.配置淘宝镜像5.1 方式一:直接执行命令5.2 方式二:修改配置文件6.常用命令7.总结下载地址: https://github.com/coreybutler/nvm-windows/releases1.背景 在工作中,我们可能需要同时进行2个或者多个前端项目的开发,每个项…