找回密码
 立即注册
查看: 7|回复: 0

2023年GESP四级真题解析:幸运数的判定算法详解

[复制链接]
  • 打卡等级:即来则安
  • 打卡总天数:21
  • 打卡月天数:9
  • 打卡总奖励:137
  • 最近打卡:2025-07-13 16:05:00

24

主题

0

回帖

4500

积分

VIP会员

积分
4500
发表于 2025-7-4 11:49:38 | 显示全部楼层 |阅读模式
一、问题背景
题目要求判断一个数是否为"幸运数",定义规则为:
  • 从个位开始编号为第1位
  • 奇数位数字要经过特殊变换
  • 所有位数字相加的和是8的倍数

二、算法核心思想
  • 数字位数处理:将数字转为字符串便于逐位处理
  • 奇数位变换:乘以7后求数字根(各位相加直到个位数)
  • 模运算判断:验证各位和是否为8的倍数

三、完整代码解析(带详细注释)
  1. #include <iostream>
  2. #include <string>
  3. using namespACe std;

  4. // 处理奇数位数字变换
  5. int transformDigit(int digit) {
  6.     digit *= 7;  // 先乘以7
  7.     // 循环处理直到数字不大于9
  8.     while (digit > 9) {
  9.         int sum = 0;
  10.         // 计算各位数字之和
  11.         while (digit > 0) {
  12.             sum += digit % 10;
  13.             digit /= 10;
  14.         }
  15.         digit = sum;
  16.     }
  17.     return digit;
  18. }

  19. // 判断是否为幸运数
  20. bool isLuckyNumber(long long num) {
  21.     string s = to_string(num);
  22.     int sum = 0;
  23.    
  24.     // 从个位开始(第1位),所以从字符串末尾开始处理
  25.     for (int i = s.length() - 1, pos = 1; i >= 0; i--, pos++) {
  26.         int digit = s[i] - '0';
  27.         // 奇数位进行变换,偶数位保持不变
  28.         if (pos % 2 == 1) {
  29.             digit = transformDigit(digit);
  30.         }
  31.         sum += digit;
  32.     }
  33.     // 判断和是否是8的倍数
  34.     return sum % 8 == 0;
  35. }

  36. int main() {
  37.     int N;
  38.     cin >> N;
  39.    
  40.     while (N--) {
  41.         long long num;
  42.         cin >> num;
  43.         if (isLuckyNumber(num)) {
  44.             cout << "T" << endl;
  45.         } else {
  46.             cout << "F" << endl;
  47.         }
  48.     }
  49.    
  50.     return 0;
  51. }
复制代码


四、关键知识点详解
  • 数字根计算:通过循环取模和除法实现数字压缩
  • 字符串处理:to_string和字符转数字技巧(-'0')
  • 奇偶位区分:通过位置计数器(pos)的奇偶性判断
  • 反向遍历:从字符串末尾开始处理个位数字

五、实际应用场景
  • 校验码生成算法
  • 数字加密变换
  • 游戏特殊数值判定
  • 数学趣味问题求解

六、学习建议
  • 尝试修改变换规则(如乘以其他数)
  • 思考如何优化数字根计算过程
  • 练习处理更大范围的数字(高精度
  • 比较字符串处理和数学取位两种实现方式的差异

来源:2023年GESP四级真题解析:幸运数的判定算法详解

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表