202309-小明的幸运数(luogu-B3864)

202309-小明的幸运数(luogu-B3864)

GESP一级真题练习。为2023年9月一级认证真题。应该是两道题中略难的一道。

luogu-B3864 小明的幸运数

题目要求

描述

所有个位数为 k 的正整数,以及所有 k 的倍数,都被小明称为“ k 幸运数”。小明想知道正整数 L 和 R 之间(包括 L 和 R)所有 k 幸运数的和,你能帮帮他吗?

输入

输入 3 行。第一行包含一个正整数 k,第二行包含一个正整数 L,第三行包含一个正整数 R。约定 2≤k≤9,1≤L≤R≤1000。

输出

输出 1 行,符合题意的幸运数之和。

输入样例-1

7
1
10

输出样例-1

7

输入样例-2

7
10
20

输出样例-2

3


题目分析

遍历判定法:

  1. 遍历区间 [L,R][L, R]:对区间内的每个数字 nn,依次判断是否为"kk 幸运数"。
  2. 判断条件
    • 如果 nmod10=kn \bmod 10 = k,说明 nn 的个位数为 kk
    • 如果 nmodk=0n \bmod k = 0,说明 nnkk 的倍数。
  3. 使用一个变量 total_sum 累加符合条件的数的和。
  4. 输出最终的和。

示例代码

#include <iostream>
using namespace std;

int main() {
    // 定义变量:lucky表示幸运数k,first和end表示区间范围[L,R]
    int lucky, first, end;
    
    // 读取输入:幸运数k和区间范围[L,R]
    cin >> lucky >> first >> end;
    
    // 定义sum变量,用于累加幸运数
    int sum = 0;
    
    // 遍历区间[L,R]
    for (int i = first; i <= end; i++) {
        // 判断条件:个位数为k或者是k的倍数
        if (i % 10 == lucky || i % lucky == 0) {
            // 累加符合条件的数
            sum += i;
        }
    }
    
    // 输出结果
    cout << sum;
    return 0;
}

{% include custom/custom-post-content-footer.md %}

所有代码已上传至Github:https://github.com/lihongzheshuai/yummy-code

luogu-”系列题目可在 洛谷题库 在线评测。

bcqm-”系列题目可在 编程启蒙题库 在线评测。

GESP/CSP 认证学习微信公众号
GESP/CSP 认证学习微信公众号
Last updated on