测评会员优惠活动进行中 · 开通 VIP,有效期内测评不限次 VIP 优惠中 · 测评不限次 立即查看

A25147. 超级幸运数

填空题 容易

题目描述

超级幸运数

题目描述:

乐乐有两个幸运数字,分别是 4 和 7。如果一个整数满足以下两个条件中的任意一个,乐乐就会称其为超级幸运数。条件如下:

1)整数中各数位上的数字都是幸运数字,例如 4、47、444;

2)整数中数位上所包含的所有幸运数字的总数是幸运数字,例如 414177(其中包含了 2 个 4 和 2 个7,共有 4 个幸运数字)。

给定 n 个整数,请判断其中有多少个超级幸运数。

例如:n = 3,3 个整数分别为 74、417、40444444;

整数 74 是超级幸运数,因为数位上的 7 和 4 都是幸运数字,满足条件 1;

整数 417 不是超级幸运数,因为数位中 1 不是幸运数字,不满足条件 1,且数位中幸运数字的总数是 2,2 不是幸运数字,不满足条件 2;

整数 40444444 是超级幸运数,因为 40444444 的数位中幸运数字的总数是 7,7 是幸运数字,满足条件 2;

综上所述,共有 2 个超级幸运数。

输入描述:

第一行输入一个整数 n(1≤n≤1000);

第二行输入 n 个整数(1≤整数≤109),整数之间以一个空格隔开。

输出描述:

输出一个整数,表示超级幸运数的数量。

样例输入:

3
74 417 40444444

样例输出:

2

参考答案

#include <iostream> #include <string> using namespace std; int main() { int n; cin >> n; int superLuckyCount = 0; for (int i = 0; i < n; i++) { long long num; cin >> num; string s = to_string(num); bool condition1 = true; int count47 = 0; // 遍历每个字符 for (char c : s) { if (c == '4' || c == '7') { count47++; } else { condition1 = false; } } bool condition2 = (count47 == 4 || count47 == 7); if (condition1 || condition2) { superLuckyCount++; } } cout << superLuckyCount << endl; return 0; }

答案解析

输入处理:

读取整数个数 n

循环读取每个整数 num

字符串转换:

使用 to_string() 将整数转换为字符串,便于逐字符处理

条件检查:

condition1:检查所有字符是否都是'4'或'7'

count47:统计'4'和'7'出现的总次数

condition2:检查总次数是否为4或7

结果统计:

如果满足任一条件,超级幸运数计数增加

最终输出满足条件的整数数量

上一题 下一题