E-水仙花数(100p)

刷题笔记合集🔗

水仙花数

问题描述

水仙花数是指一个 n 位的正整数,其各位数字的 n 次方和等于该数本身。例如,153 是水仙花数,因为 153 是一个 3 位数,并且

输入格式

第一行输入一个整数 ,表示一个 n 位的正整数。 在 3 到 7 之间,包含 3 和 7。

第二行输入一个整数 ,表示需要返回第 m 个水仙花数。

输出格式

返回长度是 n 的第 m 个水仙花数。个数从 0 开始编号。

大于水仙花数的个数,返回最后一个水仙花数和 的乘积。

若输入不合法,返回 -1。

样例输入

3
0

样例输出

153

样例解释

样例 解释说明
样例1 153 是第一个水仙花数。
样例2 输入 n 为 9,超出范围。

数据范围

题解

枚举

  1. 输入验证:首先检查输入的有效性,确保 在 [3, 7] 范围内。
  2. 生成水仙花数:根据给定的位数 ,遍历所有可能的 n 位数字(从 ),计算每个数字的各位数字的 n 次方和。
  3. 存储结果:将符合条件的水仙花数存储在列表中。
  4. 返回结果
    • 如果找到的水仙花数数量大于 ,则返回第 m 个。
    • 如果数量不足,返回最后一个水仙花数与 的乘积。
    • 如果输入无效,则返回 -1。

参考代码

  • Python
def is_narcissistic(num, n):
    """判断一个数字是否为水仙花数"""
    return sum(int(digit) ** n for digit in str(num)) == num

def find_narcissistic_numbers(n):
    """找到所有 n 位的水仙花数"""
    lower_bound = 10 ** (n - 1)
    upper_bound = 10 ** n
    narcissistic_numbers = []
    
    for num in range(lower_bound, upper_bound):
        if is_narcissistic(num, n):
            narcissistic_numbers.append(num)
    
    return narcissistic_numbers

def main():
    # 输入处理
    try:
        n = int(input().strip())
        m = int(input().strip())
        
        if not (3 <= n <= 7):
            print(-1)
            return
        
        narcissistic_numbers = find_narcissistic_numbers(n)
        
        if m < len(narcissistic_numbers):
            print(narcissistic_numbers[m])
        else:
            last_number = narcissistic_numbers[-1] if narcissistic_numbers else -1
            print(last_number * m)

    except ValueError:
        print(-1)

if __name__ == "__main__":
    main()
  • C
#include <stdio.h>
#include <math.h>

int is_narcissistic(int num, int n) {
    int sum = 0, original = num;
    
    while (num > 0) {
        int digit = num % 10;
        sum += pow(digit, n);
        num /= 10;
    }
    
    return sum == original;
}

void find_narcissistic_numbers(int n, int *result, int *count) {
    int lower_bound = pow(10, n - 1);
    int upper_bound = pow(10, n);
    
    for (int num = lower_bound; num < upper_bound; num++) {
        if (is_narcissistic(num, n)) {
            result[(*

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

算法刷题笔记 文章被收录于专栏

本专栏收集并整理了一些刷题笔记

全部评论

相关推荐

不愿透露姓名的神秘牛友
10-30 18:44
点赞 评论 收藏
分享
评论
1
1
分享
牛客网
牛客企业服务