gesp c++ 八级知识点

以下是根据GESP C++八级考试大纲的 超详细知识点解析与代码实现,涵盖计数原理、排列组合、图论算法、倍增法等核心内容,每个知识点均包含 概念说明、应用场景、使用方法、优缺点完整代码示例


一、计数原理

1.1 加法原理与乘法原理
  • 概念
    • 加法原理:完成一件事有多个互斥方案,总方法数为各方案方法数之和。
    • 乘法原理:完成一件事需多个独立步骤,总方法数为各步骤方法数的乘积。
  • 应用场景
    • 加法原理:选择不同类别的路径或物品。
    • 乘法原理:排列组合问题、密码组合计算。
  • 例题
    • 加法:从北京到上海有3种飞机航班或2种高铁班次,总共有 3 + 2 = 5 种选择。
    • 乘法:密码锁有4位,每位有0-9可选,总组合数为 10^4 = 10000
  • 代码示例(计算路径选择方案):
    int addPrinciple(int a, int b) {
          return a + b; }  // 加法原理
    int mulPrinciple(int steps, int options) {
                 // 乘法原理
        int total = 1;
        for (int i = 0; i < steps; i++) total *= options;
        return total;
    }
    

二、排列与组合

2.1 排列(Permutation)
  • 概念:从n个元素中选k个并考虑顺序,记作P(n, k)。
  • 公式P(n, k) = n! / (n-k)!
  • 代码示例(生成全排列):
    #include 
    #include 
    using namespace std;
    
    vector<vector<int>> generatePermutations(vector<int> nums) {
         
        vector<vector<int>> res;
        sort(nums.begin(), nums.end());
        do {
         
            res.push_back(nums);
        } while (next_permutation(nums.begin(), nums.end()));
        return res;
    }
    // 调用示例:generatePermutations({1,2,3});
    
2.2 组合(Combination)
  • 概念:从n个元素中选k个不考虑顺序,记作C(n, k)。
  • 公式C(n, k) = n! / (k! * (n-k)!)
  • 代码示例(生成所有组合):
    void backtrack(vector<int>& nums, int start, int k, vector<int>& path, vector<vector<int>>& res) {
         
        if (path.size() 

你可能感兴趣的:(Gesp,c++,考级知识点,c++,代理模式,开发语言)