小猴编程周赛C++ | 2022年秋第9周T3快乐数

学习C++从娃娃抓起!记录下在学而思小猴编程学习过程中的题目,记录每一个瞬间。侵权即删,谢谢支持!

附上汇总贴:小猴编程C++ | 汇总-CSDN博客


【题目描述】
小猴对数字非常敏感,机缘巧合之下,他发现了一种特殊的数字,小猴称其为快乐数。快乐数定义为:如果对于一个正整数 y y y,如果存在一个正整数 x x x,使得 x x x加上 x x x的各个数字之和为 y y y,那么就称 y y y是一个快乐数, x x x y y y的快乐因子。
例如:
y = 205 y=205 y=205是一个快乐数,其快乐因子为 188 188 188
y = 108 y=108 y=108不是一个快乐数,其没有对应的快乐因子;
y = 2021 y=2021 y=2021是一个快乐数,其快乐因子为 1996 1996 1996
现在小猴想要询问你 q q q次,每次询问给出一个整数 y y y,你需要回答 y y y是否是快乐数,如果 y y y是快乐数,就输出对应的快乐因子,如果 y y y有多个快乐因子就输出最小的快乐因子,否则输出No
【输入】
第一行,包含一个整数 q q q,表示有 q q q次询问;
接下来 q q q行,每行包含一个正整数 y i y_i yi,其中第 i i i行的整数 y i y_i yi表示第 i i i次询问给出的整数。
【输出】
输出共 q q q行,对于第 i i i行,如果 y i y_i yi是快乐数,就输出其对应最小的快乐因子,否则输出No,每行一个结果。
【输入样例】

3
8
15
7

【输出样例】

4
12 
No

【代码详解】
[图片]

#include <bits/stdc++.h>
using namespace std;
int a[1000010];
int main()
{
    for (int i=1; i<=1000000; i++) {  // 枚举1-1000000
        int sum = 0, x = i;  // 定义数位之和、快乐因子
        while (x>0) {  // 数位拆分
            sum += x % 10;
            x /= 10;
        }
        if (a[sum+i]==0) {  // 如果sum+i这个数没有快乐因子
            a[sum+i] = i;  // 其快乐因子就是i。如果有快乐因子的话,那肯定是之前更小的值,无需更新
        }
    }
    int q;
    cin >> q;  
    for (int i=1; i<=q; i++) {  // 遍历q次询问
        int y;
        cin >> y;  // 输入y
        if (a[y]==0) {  // 如果没有快乐因子,输出No
            cout << "No" << endl;
        } else {  // 否则输出快乐因子
            cout << a[y] << endl;
        }
    }
    return 0;
}

【运行结果】

3
8
4
15
12
7
No
  • 29
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值