真题-数的分解

标题: 数的分解(本题总分:10 分)
【问题描述】
把 2019 分解成 3 个各不相同的正整数之和,并且要求每个正整数都不包
含数字 2 和 4,一共有多少种不同的分解方法?
注意交换 3 个整数的顺序被视为同一种方法,例如 1000+1001+18 和
1001+1000+18 被视为同一种。
【答案提交】
这是一道结果填空的题,你只需要算出结果后提交即可。本题的结果为一
个整数,在提交答案时只填写这个整数,填写多余的内容将无法得分

#include <iostream>
using namespace std;
bool judge(int i) {
    while (i) {
        if (i % 10 == 2 || i % 10 == 4)
            return false;
        i /= 10;
    }
    return true;
}
int main() {
    int ans = 0;
    for (int i = 1; i <= 672; i++) {
        if (judge(i))
            for (int j = i + 1; j <= 1008; j++) {
                if (judge(j))
                    for (int k = j + 1; k <= 1999; k++) {
                        if (judge(k))
                            if (i + j + k == 2019) {
                                // cout << i << " " << j << " " << k << endl;
                                ans++;
                            }
                    }
            }
    }

    cout << ans;
    return 0;
}
(Kriging_NSGA2)克里金模型结合多目标遗传算法求最优因变量及对应的最佳自变量组合研究(Matlab代码实现)内容概要:本文介绍了克里金模型(Kriging)与多目标遗传算法NSGA-II相结合的方法,用于求解最优因变量及其对应的最佳自变量组合,并提供了完整的Matlab代码实现。该方法首先利用克里金模型构建高精度的代理模型,逼近复杂的非线性系统响应,减少计算成本;随后结合NSGA-II算法进行多目标优化,搜索帕累托前沿解集,从而获得多个最优折衷方案。文中详细阐述了代理模型构建、算法集成流程及参设置,适用于工程设计、参反演等复杂优化问题。此外,文档还展示了该方法在SCI一区论文中的复现应用,体现了其科学性与实用性。; 适合人群:具备一定Matlab编程基础,熟悉优化算法值建模的研究生、科研人员及工程技术人员,尤其适合从事仿真优化、实验设计、代理模型研究的相关领域工作者。; 使用场景及目标:①解决高计算成本的多目标优化问题,通过代理模型降低仿真次;②在无法解析求导或函高度非线性的情况下寻找最优变量组合;③复现SCI高水平论文中的优化方法,提升科研可信度与效率;④应用于工程设计、能源系统调度、智能制造等需参优化的实际场景。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现过程,重点关注克里金模型的构建步骤与NSGA-II的集成方式,建议自行调整测试函或实际案例验证算法性能,并配合YALMIP等工具包扩展优化求解能力。
### 蓝桥杯2020年第十一届省赛——整数拼接问题 #### 题目描述 给定两个正整数序列 $ A_1, A_2, \dots, A_n $ $ B_1, B_2, \dots, B_m $,定义一种操作称为 **整数拼接**。对于任意一对 $(A_i, B_j)$,可以将其拼接成一个新的整数 $ X_{ij} = A_iB_j $(即将 $ A_i $ $ B_j $ 连接在一起)。 现在给出一个正整数 $ k $,问有多少种拼接方式使得新得到的整数能被 $ k $ 整除。 --- #### 解题思路 此问题的核心在于如何高效判断拼接后的结果能否被 $ k $ 整除。以下是具体析: 1. 对于每一个整数 $ Ai $ $ Bj $,可以通过模运算快速计算其对 $ k $ 的贡献[^1]。 设 $ r_A = (Ai \% k) $ 表示 $ Ai $ 模 $ k $ 后的结果,$ r_B = (Bj \% k) $ 表示 $ Bj $ 模 $ k $ 后的结果。假设 $ len(Bj) $ 是 $ Bj $ 的长度,则有如下关系成立: $$ ((r_A * (10^{len(Bj)} \% k)) \% k + r_B) \% k = 0 $$ 2. 将上述公式分解为更易处理的形式: - 计算 $ 10^{len(Bj)} \% k $ 并存储下来以便后续使用。 - 构建一个二维组 `a[位][余]` 来记录每个可能的组合情况。 3. 使用预处理方法优化时间复杂度: - 提前统计所有 $ Ai $ 中每种余值的量并存入二维组中。 - 遍历所有的 $ Bj $,利用已知的关系查找符合条件的配对量。 4. 时间复杂度析: - 统计阶段的时间复杂度为 $ O(n + m) $。 - 查询阶段每次只需常次访问即可完成匹配,因此总复杂度仍保持较低水平。 --- #### 实现代码 下面是基于以上算法思想实现的一个 C++ 版本解决方案: ```cpp #include <bits/stdc++.h> using namespace std; const int MAX_K = 1e5; // 根据实际据范围调整 int mod_table[10]; // 存储不同长度下的(10^len % k) // 初始化mod_table函 void init_mod(int k){ mod_table[0] = 1; long long base = 1; for(int i=1;i<=9;i++){ base *=10; base %=k; mod_table[i]=base; } } int main(){ ios::sync_with_stdio(false); cin.tie(0); int n,m,k; cin>>n>>m>>k; vector<int> a(n), b(m); for(auto &x:a)cin>>x; for(auto &y:b)cin>>y; // 处理a中的元素,构建哈希表 vector<vector<int>> count_a(k,vector<int>(10,0)); for(auto x : a){ int rem=x%k; string s=to_string(x); int len=s.size(); if(len>=1 && len<=9){ // 确保合法范围内 count_a[rem][len]++; } } // 初始化mod_table init_mod(k); long long ans=0; for(auto y:b){ int rem_y=y%k; string t=to_string(y); int len_t=t.size(); if(mod_table[len_t]==0){ if(rem_y==0)ans++; }else{ int target_rem=(k-rem_y*mod_table[len_t]%k+k)%k; if(target_rem<k){ ans+=count_a[target_rem][len_t]; } } } cout<<ans<<"\n"; } ``` --- #### 结果验证与注意事项 该程序能够有效解决蓝桥杯第十一届省赛的相关题目,并具有较高的效率。需要注意的是,在实际应用过程中应确保输入据规模合理以及边界条件的正确性[^2]。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值