水仙花数(华为OD)

题目描述

所谓水仙花数,是指一个n位的正整数,其各位数字的n次方和等于该数本身。
 
例如153是水仙花数,153是一个3位数,并且153 = 13 + 53 + 33

输入描述

第一行输入一个整数n,表示一个n位的正整数。n在3到7之间,包含3和7。
 
第二行输入一个正整数m,表示需要返回第m个水仙花数。

输出描述

返回长度是n的第m个水仙花数。个数从0开始编号。
 
若m大于水仙花数的个数,返回最后一个水仙花数和m的乘积。
 
若输入不合法,返回-1。

运行结果

  1. 输入:4 1  输出:8208  说明:8208是第一个水仙花数
  2. 输入:7 5  输出:49631575  说明:5超出范围,所以最后一个水仙花数和5的乘积
  3. 输入:8 2  输出:49631575  说明:8超出范围

题目解析

本题的水仙花数最长有7位,这7位很少,我们可以直接提前计算好3~7位的所有水仙花数来配置为字典,进行打表查询,考试时怎么记得有哪些数字是水仙花数字呢,但是我已经写很简单的源码提供:

#include<stdio.h>
#include<math.h>
int main() {

    int x, y, z, a, b, c, d;

    int i;
    printf("3位数 -> 水仙花数分别为:");
    for (i = 100; i <= 999; i++) {
        x = i / 100;
        y = i / 10 % 10;
        z = i % 10;
        if (i == (int) pow(x, 3) + (int) pow(y, 3) + (int) pow(z, 3)) {
            printf("%d ", (int) pow(x, 3) + (int) pow(y, 3) + (int) pow(z, 3));
        }
    }
    printf("\n");

    printf("4位数 -> 水仙花数分别为:");
    for (i = 1000; i <= 9999; i++) {
        x = i / 1000;
        y = i / 100 % 10;
        z = i / 10 % 10;
        a = i % 10;
        if (i == (int) pow(x, 4) + (int) pow(y, 4) + (int) pow(z, 4) + (int) pow(a, 4)) {
            printf("%d ", (int) pow(x, 4) + (int) pow(y, 4) + (int) pow(z, 4) + (int) pow(a, 4));
        }
    }
    printf("\n");

    printf("5位数 -> 水仙花数分别为:");
    for (i = 12345; i <= 99999; i++) {
        x = i / 10000;
        y = i / 1000 % 10;
        z = i / 100 % 10;
        a = i / 10 % 10;
        b = i % 10;
        if (i == (int) pow(x, 5) + (int) pow(y, 5) + (int) pow(z, 5) + (int) pow(a, 5) + (int) pow(b, 5)) {
            printf("%d ", (int) pow(x, 5) + (int) pow(y, 5) + (int) pow(z, 5) + (int) pow(a, 5) + (int) pow(b, 5));
        }
    }
    printf("\n");

    printf("6位数 -> 水仙花数分别为:");
    for (i = 100000; i <= 999999; i++) {
        x = i / 100000;
        y = i / 10000 % 10;
        z = i / 1000 % 10;
        a = i / 100 % 10;
        b = i / 10 % 10;
        c = i % 10;
        if (i == (int) pow(x, 6) + (int) pow(y, 6) + (int) pow(z, 6) + (int) pow(a, 6) + (int) pow(b, 6) + (int) pow(c, 6)) {
            printf("%d ", (int) pow(x, 6) + (int) pow(y, 6) + (int) pow(z, 6) + (int) pow(a, 6) + (int) pow(b, 6) + (int) pow(c, 6));
        }
    }
    printf("\n");

    printf("7位数 -> 水仙花数分别为:");
    for (i = 1000000; i <= 9999999; i++) {
        x = i / 1000000;
        y = i / 100000 % 10;
        z = i / 10000 % 10;
        a = i / 1000 % 10;
        b = i / 100 % 10;
        c = i / 10 % 10;
        d = i % 10;
        if (i == (int) pow(x, 7) + (int) pow(y, 7) + (int) pow(z, 7) + (int) pow(a, 7) + (int) pow(b, 7) + (int) pow(c, 7) + (int) pow(d, 7)) {
            printf("%d ", (int) pow(x, 7) + (int) pow(y, 7) + (int) pow(z, 7) + (int) pow(a, 7) + (int) pow(b, 7) + (int) pow(c, 7) + (int) pow(d, 7));
        }
    }

    return 0;
}

我们可以看到所有水仙花数,直接复制进行打表法,这道题实现逻辑并不难,大家可以看下面算法源码

C算法源码

#include<stdio.h>
int main() {

    int n, m;
    scanf("%d", &n);
    scanf("%d", &m);

    if (3 <= n && 7 >= n && 0 <= m) {
        int daffodil[8][8];
        int daffodilSize[8];
        
        daffodil[3][0] = 153; daffodil[3][1] = 370; daffodil[3][2] = 371; daffodil[3][3] = 407;
        daffodilSize[3] = 4;

        daffodil[4][0] = 1634; daffodil[4][1] = 8208; daffodil[4][2] = 9474;
        daffodilSize[4] = 3;

        daffodil[5][0] = 54748; daffodil[5][1] = 92727; daffodil[5][2] = 93084;
        daffodilSize[5] = 3;

        daffodil[6][0] = 548834;
        daffodilSize[6] = 1;

        daffodil[7][0] = 1741725; daffodil[7][1] = 4210818; daffodil[7][2] = 9800817; daffodil[7][3] = 9926315;
        daffodilSize[7] = 4;

        if (m < daffodilSize[n]) {
            printf("%d", daffodil[n][m]);
        } else {
            printf("%lld", (long long) daffodil[n][daffodilSize[n] - 1] * m);
        }

    } else {
        printf("-1");
    }

    return 0;
}

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

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

相关文章

《Python实战进阶》No 7: 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战

第7集&#xff1a; 一个AI大模型聊天室的构建-基于WebSocket 实时通信开发实战 在现代 Web 开发中&#xff0c;实时通信已经成为许多应用的核心需求。无论是聊天应用、股票行情推送&#xff0c;还是多人协作工具&#xff0c;WebSocket 都是实现高效实时通信的最佳选择之一。本…

极简Redis速成学习

redis是什么&#xff1f; 是一种以键值对形式存储的数据库&#xff0c;特点是基于内存存储&#xff0c;读写快&#xff0c;性能高&#xff0c;常用于缓存、消息队列等应用情境 redis的五种数据类型是什么&#xff1f; 分别是String、Hash、List、Set和Zset&#xff08;操作命…

ADC采集模块与MCU内置ADC性能对比

2.5V基准电压源&#xff1a; 1. 精度更高&#xff0c;误差更小 ADR03B 具有 0.1% 或更小的初始精度&#xff0c;而 电阻分压方式的误差主要来自电阻的容差&#xff08;通常 1% 或 0.5%&#xff09;。长期稳定性更好&#xff0c;分压电阻容易受到温度、老化的影响&#xff0c;长…

python数据容器切片

从一个序列中取出一个子序列 序列[起始位置:结束位置:步长] 起始位置和结束位置 省略,表示从头取到尾 步长省略表示1 步长负数,表示从后往前取 步长-1 等同于将序列反转了

【网络安全 | 渗透测试】GraphQL精讲一:基础知识

未经许可,不得转载, 文章目录 GraphQL 定义GraphQL 工作原理GraphQL 模式GraphQL 查询GraphQL 变更(Mutations)查询(Queries)和变更(Mutations)的组成部分字段(Fields)参数(Arguments)变量别名(Aliases)片段(Fragments)订阅(Subscriptions)自省(Introspecti…

005-Docker 安装 Redis

Docker 安装 Redis 1.从镜像官网拉取Redis镜像2.创建实例并启动3.测试连接4.设置开机启动 1.从镜像官网拉取Redis镜像 镜像官网地址&#xff1a;https://hub.docker.com执行命令 -- 拉取最新的版本 docker pull redis查看镜像 docker images2.创建实例并启动 先创建好需要的…

【星云 Orbit • STM32F4】04.一触即发:GPIO 外部中断

【星云 Orbit- • STM32F4】04. 一触即发&#xff1a;外部中断控制 摘要 本文详细介绍了如何使用STM32F407微控制器的HAL库实现外部中断功能。通过配置GPIO引脚作为外部中断源&#xff0c;并在中断回调函数中处理按键事件&#xff0c;实现了按键控制LED状态翻转的功能。本文旨…

探索Elasticsearch:索引的CRUD

在企业环境中&#xff0c;Elasticsearch的索引CRUD&#xff08;创建Create、读取Read、更新Update、删除Delete&#xff09;操作是非常基础且频繁使用的功能。这些操作对于管理和维护数据至关重要&#xff0c;尤其是在处理大规模数据集和需要实时搜索与分析的应用场景中。 目录…

React antd的datePicker自定义,封装成组件

一、antd的datePicker自定义 需求&#xff1a;用户需要为日期选择器的每个日期单元格添加一个Tooltip&#xff0c;当鼠标悬停时显示日期、可兑换流量余额和本公会可兑流量。这些数据需要从接口获取。我需要结合之前的代码&#xff0c;确保Tooltip正确显示&#xff0c;并且数据…

NVIDIA GPU 架构详解:Pascal、Volta、Turing、Ampere、Ada、Hopper、Blackwell

目录 1. Pascal&#xff08;帕斯卡&#xff09;架构&#xff08;2016&#xff09;关键技术性能特性代表产品应用场景 2. Volta&#xff08;伏特&#xff09;架构&#xff08;2017&#xff09;关键技术性能特性代表产品应用场景 3.Turing&#xff08;图灵&#xff09;架构&#…

Linux 命令行的基本命令(生信)

常见的操作系统包括 Windows、Mac OS X 和 Unix 。Linux 是类 Unix 操作系 统&#xff0c; 可安装在各种各样的电脑硬件设备&#xff0c; 从手机、平板电脑、路由器到超级计算 机。Linux 是一个领先的操作系统&#xff0c;世界上最快的十台超级计算机运行的都是 Linux 操作系统…

ECharts--中国地图(无敌详细)

前段时间需要做一个中国地图的页面&#xff0c;要求是展示各地产品的销量&#xff0c;我就在网上搜了很多ECharts的资料&#xff0c;学习了一下怎么使用。 本着互相学习&#xff0c;共同进步的原则&#xff0c;特此分享一下自己的学习经验以及使用技巧。如果有用的话可以给老弟…

QwenVL 2.5-本地安装编译布署全教程

开篇 DeepSeek开源后我国又开源了一个震撼大模型,QwenVL2.5,这是一个多模态的模形,它可以认图、识图、更能作图,还能读懂video。 Qwen2.5-VL 的主要特点如下所示: 感知更丰富的世界:Qwen2.5-VL 不仅擅长识别常见物体,如花、鸟、鱼和昆虫,还能够分析图像中的文本、图表…

【含文档+PPT+源码】基于SpringBoot电脑DIY装机教程网站的设计与实现

项目介绍 本课程演示的是一款 基于SpringBoot电脑DIY装机教程网站的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本…

React高级内容探索

flushSync确保了DOM立即更新 flushSync让你强制React同步刷新提供回调中的任何更新&#xff0c;这确保了DOM立即更新 flushSync是DOM更新之后的&#xff0c;像vue中的nextTick&#xff1a; import { useState,useRef} from "react" import { flushSync} from &quo…

基于 MetaGPT 自部署一个类似 MGX 的多智能体协作框架

MGX&#xff08;由 MetaGPT 团队开发的 mgx.dev&#xff09;是一个收费的多智能体编程平台&#xff0c;提供从需求分析到代码生成、测试和修复的全流程自动化功能。虽然 MGX 本身需要付费&#xff0c;但您可以通过免费服务和开源项目搭建一个类似的功能。以下是一个分步骤的实现…

主时钟与虚拟时钟约束

1、主时钟约束 1.1、主时钟约束语法&#xff1a; create_clock -name< clock_name > -period <period> -waveform{ <rise_time> <fall_time> } [get_ports< port_name >] 说明&#xff1a; name 之后的<clock_name> 是clk 的name&a…

CyberRT(apollo) 定时器模块简述及bug分析

timer 模块 timer的定义&#xff0c;cyberrt中timer模块用于设置定时器任务&#xff0c;字面意思&#xff0c;设置设置定时周期及出发频次&#xff08;周期 or oneshot)&#xff0c;到达指定时间时间触发callback time wheel 时钟节拍轮&#xff0c;常见的定时器设计&#x…

网络安全月度报告

&#x1f345; 点击文末小卡片 &#xff0c;免费获取网络安全全套资料&#xff0c;资料在手&#xff0c;涨薪更快 3.1.1网络安全现状及安全挑战 网络的出现给人们的工作和生活带来了极大的便利&#xff0c;但同时也带来了极大的安全风险。在信息传输和交换时&#xff0c;需要对…

nio多线程版本

多线程多路复用 多线程NIO&#xff0c;&#xff0c;就是多个线程&#xff0c;每个线程上都有一个Selector&#xff0c;&#xff0c;&#xff0c;比如说一个系统中一个线程用来接收请求&#xff0c;&#xff0c;剩余的线程用来读写数据&#xff0c;&#xff0c;每个线程独立干自…