力扣C++|一题多解之数学题专场(2)

Zephyr内核——内存管理——内存堆 Zephyr提供了一组允许线程动态分配内存。 阅读详情

目录

50. Pow(x, n)

60. 排列序列

66. 加一

67. 二进制求和

69. x 的平方根


50. Pow(x, n)

实现 pow(x,n),即计算 x 的 n 次幂函数(即x^n)。

示例 1:

输入:x = 2.00000, n = 10
输出:1024.00000

示例 2:

输入:x = 2.10000, n = 3
输出:9.26100

示例 3:

输入:x = 2.00000, n = -2
输出:0.25000
解释:2^(-2) = (1/2)^2 = 1/4 = 0.25

提示:

  • -100.0 < x < 100.0
  • -2^31 <= n <= 2^31-1
  • -10^4 <= x^n <= 10^4

代码1:  

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    double myPow(double x, int n)
    {
        if (n == 0)
            return 1;
        if (n % 2 == 1)
        {
            double temp = myPow(x, n / 2);
            return temp * temp * x;
        }
        else if (n % 2 == -1)
        {
            double temp = myPow(x, n / 2);
            return temp * temp / x;
        }
        else
        {
            double temp = myPow(x, n / 2);
            return temp * temp;
        }
    }
};

int main()
{
	Solution s;
	cout << s.myPow(2.00000, 10) << endl;
	cout << s.myPow(2.10000, 3) << endl;
	cout << s.myPow(2.0000, -2) << endl;
	
	return 0;
} 

代码2:  

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    double helper(double x, int n)
    {
        if (n == 0)
            return 1.0;
        double y = helper(x, n / 2);
        return n % 2 == 0 ? y * y : y * y * x;
    }

    double myPow(double x, int n)
    {
        long long N = static_cast<long long>(n);
        if (N == 0)
            return 1;
        return N > 0 ? helper(x, N) : 1. / helper(x, -N);
    }
};

int main()
{
	Solution s;
	cout << s.myPow(2.00000, 10) << endl;
	cout << s.myPow(2.10000, 3) << endl;
	cout << s.myPow(2.0000, -2) << endl;
	
	return 0;
} 

代码3:  

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    double myPow(double x, int n)
    {
        if (n == INT_MIN)
        {
            double t = dfs(x, -(n / 2));
            return 1 / t * 1 / t;
        }
        else
        {
            return n < 0 ? 1 / dfs(x, -n) : dfs(x, n);
        }
    }

private:
    double dfs(double x, int n)
    {
        if (n == 0)
        {
            return 1;
        }
        else if (n == 1)
        {
            return x;
        }
        else
        {
            double t = dfs(x, n / 2);
            return (n % 2) ? (x * t * t) : (t * t);
        }
    }
};

int main()
{
	Solution s;
	cout << s.myPow(2.00000, 10) << endl;
	cout << s.myPow(2.10000, 3) << endl;
	cout << s.myPow(2.0000, -2) << endl;
	
	return 0;
} 

输出:

1024
9.261
0.25 


60. 排列序列

给出集合 [1,2,3,...,n],其所有元素共有 n! 种排列。

按大小顺序列出所有排列情况,并一一标记,当 n = 3 时, 所有排列如下:

  1. "123"
  2. "132"
  3. "213"
  4. "231"
  5. "312"
  6. "321"

给定 n 和 k,返回第 k 个排列。

示例 1:

输入:n = 3, k = 3
输出:"213"

示例 2:

输入:n = 4, k = 9
输出:"2314"

示例 3:

输入:n = 3, k = 1
输出:"123"

提示:

  • 1 <= n <= 9
  • 1 <= k <= n!

代码1:   

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    string getPermutation(int n, int k)
    {
        string ans;
        vector<bool> st(n + 1);
        for (int i = 1; i <= n; i++)
        {
            int f = 1;
            for (int j = n - i; j >= 1; j--)
                f *= j;
            for (int j = 1; j <= n; j++)
            {
                if (!st[j])
                {
                    if (k <= f)
                    {
                        ans += to_string(j);
                        st[j] = 1;
                        break;
                    }
                    k -= f;
                }
            }
        }
        return ans;
    }
};

int main()
{
	Solution s;
	cout << s.getPermutation(3, 3) << endl;
	cout << s.getPermutation(4, 9) << endl;
	cout << s.getPermutation(3, 1) << endl;
	
	return 0;
} 

代码2:   

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    vector<string> res;
    string getPermutation(int n, int k)
    {
        string track;
        traverse(track, n);
        return res[k - 1];
    }
    void traverse(string &track, int n)
    {
        if (track.size() == n)
        {
            res.push_back(track);
            return;
        }
        for (int i = 1; i <= n; i++)
        {
            char c = i + '0';
            if (find(track.begin(), track.end(), c) != track.end())
                continue;

            track.push_back(c);
            traverse(track, n);
            track.pop_back();
        }
    }
};

int main()
{
	Solution s;
	cout << s.getPermutation(3, 3) << endl;
	cout << s.getPermutation(4, 9) << endl;
	cout << s.getPermutation(3, 1) << endl;
	
	return 0;
} 

代码3:   

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int th;
    string ans;
    string getPermutation(int n, int k)
    {
        string s;
        vector<bool> vec(9, false);
        this->th = 0;
        backtrack(n, k, s, vec);
        return ans;
    }
    bool backtrack(int n, int k, string &s, vector<bool> &vec)
    {
        if (s.length() == n)
        {
            if (++th == k)
            {
                ans = s;
                return true;
            }
        }
        for (char c = '1'; c <= '1' + n - 1; c++)
        {
            if (vec[c - '1'])
                continue;
            s.push_back(c);
            vec[c - '1'] = true;
            if (backtrack(n, k, s, vec))
                return true;
            s.pop_back();
            vec[c - '1'] = false;
        }
        return false;
    }
};

int main()
{
	Solution s;
	cout << s.getPermutation(3, 3) << endl;
	cout << s.getPermutation(4, 9) << endl;
	cout << s.getPermutation(3, 1) << endl;
	
	return 0;
} 

输出:

213
2314
123 


66. 加一

给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。

最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。

你可以假设除了整数 0 之外,这个整数不会以零开头。

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

示例 3:

输入:digits = [0]
输出:[1]

提示:

  • 1 <= digits.length <= 100
  • 0 <= digits[i] <= 9

代码1:   

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    vector<int> plusOne(vector<int> &digits)
    {
        int len = digits.size() - 1;
        for (int i = len; i >= 0; i--)
        {
            if ((digits[i] + 1 == 10 && i == len) || digits[i] >= 10)
            {
                digits[i] = 0;
                if (i == 0)
                {
                    digits.insert(digits.begin(), 1);
                }
                else
                {
                    digits[i - 1] += 1;
                }
            }
            else
            {
                if (i == len)
                {
                    digits[i] += 1;
                }
                break;
            }
        }
        return digits;
    }
};

int main()
{
	Solution s;
	vector<int> sum;
	vector<vector<int>> digits = {{1,2,3},{4,3,2,1},{0},{9,9,9}};
	
	for (auto digit:digits){
		sum = s.plusOne(digit);
		copy(sum.begin(), sum.end(), ostream_iterator<int>(cout, " "));
		cout << endl;
	}
	
	return 0;
} 

代码2:   

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    vector<int> plusOne(vector<int> &digits)
    {
        int i = 0;
        int size = digits.size();
        for (i = size - 1; i >= 0; i--)
        {
            digits[i]++;
            digits[i] = digits[i] % 10;
            if (digits[i] != 0)
                return digits;
        }
        if (i == -1)
        {
            digits.insert(digits.begin(), 1);
            digits[size] = 0;
        }
        return digits;
    }
};

int main()
{
	Solution s;
	vector<int> sum;
	vector<vector<int>> digits = {{1,2,3},{4,3,2,1},{0},{9,9,9}};
	
	for (auto digit:digits){
		sum = s.plusOne(digit);
		copy(sum.begin(), sum.end(), ostream_iterator<int>(cout, " "));
		cout << endl;
	}
	
	return 0;
} 

代码3:   

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    vector<int> plusOne(vector<int> &digits)
    {
        int len = digits.size() - 1;
        for (; len > 0 && digits[len] == 9; --len)
        {
            digits[len] = 0;
        }
        if (len == 0 && digits[0] == 9)
        {
            digits[0] = 0;
            digits.insert(digits.begin(), 1);
        }
        else
        {
            ++digits[len];
        }
        return digits;
    }
};

int main()
{
	Solution s;
	vector<int> sum;
	vector<vector<int>> digits = {{1,2,3},{4,3,2,1},{0},{9,9,9}};
	
	for (auto digit:digits){
		sum = s.plusOne(digit);
		copy(sum.begin(), sum.end(), ostream_iterator<int>(cout, " "));
		cout << endl;
	}
	
	return 0;
} 

输出:

1 2 4
4 3 2 2
1
1 0 0 0 


67. 二进制求和

给你两个二进制字符串,返回它们的和(用二进制表示)。

输入为 非空 字符串且只包含数字 1 和 0。

示例 1:

输入: a = "11", b = "1"
输出: "100"

示例 2:

输入: a = "1010", b = "1011"
输出: "10101"

提示:

  • 每个字符串仅由字符 '0' 或 '1' 组成。
  • 1 <= a.length, b.length <= 10^4
  • 字符串如果不是 "0" ,就都不含前导零。

代码1:

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

class Solution
{
public:
	string addBinary(string a, string b) {
	    string result;
	    int carry = 0;
	    int i = a.length() - 1, j = b.length() - 1;
	    
	    while (i >= 0 || j >= 0 || carry != 0) {
	        int sum = carry;
	        if (i >= 0) {
	            sum += a[i--] - '0';
	        }
	        if (j >= 0) {
	            sum += b[j--] - '0';
	        }
	        
	        result.push_back(sum % 2 + '0');
	        carry = sum / 2;
	    }
	    
	    reverse(result.begin(), result.end());
	    return result;
	}
};

int main()
{
	Solution s;
	cout << s.addBinary("11", "1") << endl;
	cout << s.addBinary("1010", "1011") << endl;
	cout << s.addBinary("1111", "11111") << endl;
	cout << s.addBinary("1100", "110111") << endl;
	
	return 0;
} 

代码2:  

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;

class Solution
{
public:
    string addBinary(string a, string b)
    {
        int sum = 0;
        string res;
        int p = 0;
        int i = a.length() - 1, j = b.length() - 1;
        
        while (i >= 0 || j >= 0 || sum != 0)
        {
            if (i >= 0) {
                sum += a[i--] - '0';
            }
            if (j >= 0) {
                sum += b[j--] - '0';
            }
            
            p = sum % 2;
            sum /= 2;
            
            res += to_string(p);
        }
        
        reverse(res.begin(), res.end());
        return res;
    }
};

int main()
{
    Solution s;
    cout << s.addBinary("11", "1") << endl;
    cout << s.addBinary("1010", "1011") << endl;
    cout << s.addBinary("1111", "11111") << endl;
    cout << s.addBinary("1100", "110111") << endl;
    
    return 0;
}

代码3:

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    string addBinary(string a, string b)
    {
        if (b.size() > a.size())
        {
            string temp = b;
            b = a;
            a = temp;
        }
        int i = a.size() - 1;
        int j = b.size() - 1;
        if (i != j)
        {
            for (int k = 0; k < i - j; k++)
                b = "0" + b;
        }
        int count = 0;
        for (int k = i; k >= 0; k--)
        {
            if (a[k] - '0' + b[k] - '0' + count == 0)
            {
                a[k] = '0';
                count = 0;
            }
            else if (a[k] - '0' + b[k] - '0' + count == 1)
            {
                a[k] = '1';
                count = 0;
            }
            else if (a[k] - '0' + b[k] - '0' + count == 3)
            {
                a[k] = '1';
                count = 1;
            }
            else
            {
                a[k] = '0';
                count = 1;
            }
        }
        if (count == 1)
            a = '1' + a;
        return a;
    }
};

int main()
{
	Solution s;
	cout << s.addBinary("11", "1") << endl;
	cout << s.addBinary("1010", "1011") << endl;
	cout << s.addBinary("1111", "11111") << endl;
	cout << s.addBinary("1100", "110111") << endl;
	
	return 0;
} 

代码4:   

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    string addBinary(string a, string b)
    {
        string result = "", rr = "";
        char aa, bb;
        int l1 = a.length(), l2 = b.length(), i = l1 - 1, j = l2 - 1, carry = 0, sum = 0;
        while (true)
        {
            if (i < 0)
                aa = '0';
            else
                aa = a[i];
            if (j < 0)
                bb = '0';
            else
                bb = b[j];
            sum = (aa - '0') + (bb - '0') + carry;
            result += ((sum % 2) + '0');
            carry = sum / 2;
            j--;
            i--;
            if (i < 0 && j < 0)
            {
                if (carry == 1)
                    result += "1";
                break;
            }
        }
        int l3 = result.length();
        for (int i = l3 - 1; i >= 0; i--)
            rr += result[i];
        return rr;
    }
};

int main()
{
	Solution s;
	cout << s.addBinary("11", "1") << endl;
	cout << s.addBinary("1010", "1011") << endl;
	cout << s.addBinary("1111", "11111") << endl;
	cout << s.addBinary("1100", "110111") << endl;
	
	return 0;
} 

输出: 

100
10101
101110
1000011 


69. x 的平方根

实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。

示例 1:

输入: 4
输出: 2

示例 2:

输入: 8
输出: 2
说明: 8 的平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。

代码1:   

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int mySqrt(int x)
    {
        long long i = 0;
        long long j = x / 2 + 1;
        while (i <= j)
        {
            long long mid = (i + j) / 2;
            long long res = mid * mid;
            if (res == x)
                return mid;
            else if (res < x)
                i = mid + 1;
            else
                j = mid - 1;
        }
        return j;
    }
};

int main()
{
	Solution s;
	cout << s.mySqrt(4) << endl;
	cout << s.mySqrt(8) << endl;
	
	cout << s.mySqrt(121) << endl;
	cout << s.mySqrt(120) << endl;
	cout << s.mySqrt(122) << endl;
	
	return 0;
} 

代码2:   

#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int mySqrt(int x)
    {
        if (x == 0)
            return 0;
        double last = 0;
        double res = 1;
        while (res != last)
        {
            last = res;
            res = (res + x / res) / 2;
        }
        return int(res);
    }
};

int main()
{
	Solution s;
	cout << s.mySqrt(4) << endl;
	cout << s.mySqrt(8) << endl;
	cout << s.mySqrt(121) << endl;
	cout << s.mySqrt(120) << endl;
	cout << s.mySqrt(122) << endl;
	
	return 0;
} 

代码3:   

#include <iostream>
#include <math.h>
using namespace std;

class Solution
{
public:
	int mySqrt(int x) {
	    if (x <= 1) {
	        return x;
	    }
	
	    int left = 1;
	    int right = x;
	    while (left <= right) {
	        int mid = left + (right - left) / 2;
	        if (mid == x / mid) {
	            return mid;
	        } else if (mid < x / mid) {
	            left = mid + 1;
	        } else {
	            right = mid - 1;
	        }
	    }
	
	    return right;
	}
};

int main()
{
	Solution s;
	cout << s.mySqrt(4) << endl;
	cout << s.mySqrt(8) << endl;
	cout << s.mySqrt(121) << endl;
	cout << s.mySqrt(120) << endl;
	cout << s.mySqrt(122) << endl;
	
	return 0;
} 

输出:

2
2
11
10
11

另: cmath或者math.h库中有现成的函数 sqrt() 


相关阅读: 力扣C++|一题多解之数学题专场(1)

【拼多多笔试题汇总】2024-03-24-拼多多春招笔试题 A 小镇上有个奇特的游戏。游戏开始时,A 先生准备了一排 nnn 个物品。K 小姐和卢小姐则轮流进行操作。首先,K 小姐可以选择移除至多 xxx 个物品。接着,卢小姐也可以选择移除剩余物品中的至多 yyy 个。游戏的目标是,K 小姐想尽量让剩余物品的价值之和最大化,而卢小姐则想将剩余物品的价值之和最小化。假设两人都采取最优策略,请问最后剩余物品的价值之和是多少?第一行包含五个正整数 n,m,k,x,yn, m, k, x, yn,m,k,x,y,分别表示物品的总数、K 小姐最多可移除的物品数、卢小姐最多可移 阅读详情

相关推荐

汽车LED驱动芯片TPS92682-Q1 SPI接口配置与调试实战指南

SPI(串行外设接口)作为一种高速、全双工的同步串行通信总线,广泛应用于微控制器与外围设备之间的数据交换。其工作原理基于主从架构,通过时钟、数据线和片选信号实现设备间的精准时序控制。在汽车电子和工业控制领域,SPI因其简单高效、易于扩展的特性,成为配置复杂电源管理芯片、传感器和存储器的关键技术。通过SPI接口,工程师能够动态调整设备参数、实时读取状态信息,并实现复杂的故障诊断与保护策略,极大地提升了系统的灵活性与可靠性。本文以汽车级双通道LED恒流驱动器TPS92682-Q1为例,深入解析如何通过SPI接口

weixin_29185493的博客 288

力扣C++|一题多解之数学题专场(1)

7. 整数反转   9. 回文数   12. 整数转罗马数字   13. 罗马数字转整数   29. 两数相除

汉阳Hann's Home 2083

生存网络与mlr3proba

通过结合生存网络和mlr3proba,可以使用生存网络模型来预测个体在给定时间点发生事件的概率,并使用mlr3proba提供的工具进行模型的训练、评估和选择最佳模型。iii)基本的机器学习(ML)方法,如重新排序和调整。在本文中,我们将只讨论前五种,因为它们在文献中得到了更好的建立,并且它们具有相同的接口,这简化了调优,我们将在下面看到。我们不会为模型指定自定义架构,而是使用默认架构,如果你熟悉PyTorch,那么你可以选择创建自己的架构,如果你愿意的话,通过将其传递给模型中的custom_net参数。

weixin_46587777的博客 1364

C++ 你会使用cmath库里的宏常量吗?(π、e、ln2、√2、(2/√π) 等等)

前面在写定积分函数时,自定义了2个常量:圆周率 π和 自然常数 e #define E 2.71828182845904523536 #define Pi 3.14159265358979323846 其实<cmath>或<math.h>库里已经“隐藏”着这些常量了,说它“隐藏”的原因是因为仅包括了库还能直接引用,要在"#include <cmath>"之前加一行: #define _USE_MATH_DEFINES 注意:必须在<...

汉阳Hann's Home 2万+

ShardingSphere-jdbc 5.5.0 + spring boot 基础配置 - 实战篇

shardingsphere 5.5.0移除了sm4算法,自己加上即可。增加spi扩展org.apache.shardingsphere.encrypt.spi.EncryptAlgorithm增加以下代码:SM4算法代码/***/static {@Getter@Overrideif (!

qq_21903999的博客 4744

深度解析电力负荷预测:基于深度学习的完整实战指南

电力负荷预测是智能电网运行中的核心技术之一,准确的负荷预测对于电网的稳定运行、电力市场交易以及能源调度具有重要意义。本文将详细介绍电力负荷预测的完整解决方案,从数据预处理、特征工程到模型构建与评估,提供完整的可执行代码。我们将使用LSTM(长短期记忆网络)和Transformer两种主流深度学习模型进行实现,并通过实际数据集验证模型效果。电力负荷预测是指根据历史负荷数据、气象因素、时间特征等多维信息,预测未来某一时段的电力需求。超短期负荷预测:未来几分钟到几小时短期负荷预测:未来1天到1周中期负荷预测。

YOLO 111

C++ 用DEV-C++建一个Windows窗口程序带文本框和命令按钮

在Dev-C++ 5.11上创建并正常运行,操作系统32位、64位Win7均可。首先在文件菜单里新建项目,选择Windows Application,命名完成后得到程序框架。最后在代码中添加上控件和对应的事件即可。

汉阳Hann's Home 2万+

高通MBIM拨号流程简述

高通平台MBIM流程简述

不秃头的程序猿Gabriel的博客 5070

C++ Windows窗口程序:子窗口控件之按钮类button

Windows窗口程序设计中,按钮、文本编辑框等控件都作为一个子窗口在WM_CREATE事件中创建的。其中按钮类button有多种类型和风格,常见的单选钮、复选钮、分组框也在此类中,见下表: 子窗口控件:按钮类button 按钮类型,可以是按钮风格与窗口风格的组合 窗口风格: WS_CHILD 子窗口,必须有 WS_VISIBLE 窗口可见,一般都有 WS_DISABLED 禁用窗口,创建初始状态为灰色不可用的按钮时使用 WS_TABST

汉阳Hann's Home 2万+

RK3588多核NPU并行加速yolo优化教程:基于线程池的高性能推理实现

本教程详细介绍了RK3588多核NPU的并行加速优化方法。RK3588搭载三个独立NPU核心,总计算能力达6TOPS,但传统单线程方式无法充分发挥其性能。文章从硬件架构分析入手,详细讲解了三核心独立处理架构和多种工作模式,并通过代码示例展示了线程池技术的实现原理。线程池通过预创建工作线程、任务队列和条件变量等核心组件,避免了频繁创建线程的开销,能显著提升NPU的并行处理效率。教程还提供了性能计算公式和内存带宽优化策略,帮助开发者最大化利用RK3588的硬件算力,实现高性能AI推理。

LXY_LOVE36的博客 1024

影像组学文章复现:ITHscore:通过多尺度放射学特征全面定量NSCLC肿瘤内异质性 ----小细胞肺癌肿瘤异质性评分

目的:通过计算机断层扫描(CT)图像量化非小细胞肺癌(NSCLC)的肿瘤内异质性(ITH)。 方法:整合局部辐射特征和全局像素分布模式,开发定量ITH测量-ITHscore。在六个患者队列(n = 1399)中检查ITHscore与肿瘤表型,基因型和患者预后的关联,以验证其在表征ITH方面的有效性。

xxx 1020

C++ vector容器的多种遍历方式

vector容器的遍历方式 //方式一:普通for循环 //方式二:for auto循环 //方式三:迭代器 //方式四:for_each() //方式五:transform() //方式六:copy()+输出流迭代器

汉阳Hann's Home 1万+

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

C++ 遍历循环语句 for(auto i:) 和 for_each()

传统for语句: int a[8]={1,1,2,3,5,8,13,21}; for (int i=0;i<8;i++) cout<<a[i]; 一般形式:for (单次表达式;条件表达式;末尾循环体) {中间循环体;} 对条件已知递增为1的可用遍历形式: for ( int i:a) cout<<a[i]; 这里的int i并非i是整型变量,而是a[]的类型,如它是一个string数组: string b[3]={"a","ab","abc"...

汉阳Hann's Home 1万+

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

C++实现的二叉树创建和遍历,超入门邻家小女也懂了

所有层的节点都达到最大数量,叶子除外的所有节点都有两个子节点,所有叶子都在最底一层(k)且数目为2^(k - 1)。如果删除最底一层的所有叶子它就是满二叉树,即除了最后一层,每层节点都达到最大数量 ,即有深度k的个节点数在左闭右开【2^(k-1)+1,2^k-1】区间内。1. 具有N个节点的完全二叉树的深度为[log2 N]+1,其中[x]为高斯函数,截尾取整。(3)若在任意一棵二叉树中,有n0个叶子节点,有n2个度为2的节点,则必有n0=n2+1。(1)如果i=1,则节点i是二叉树的根,无双亲......

汉阳Hann's Home 1万+

C++ Beep()演奏简谱的改进以及实现背景音乐

看到BEEP就会想起上世纪90年代初在8086的机器或者稍后的286、386机器上用解释型Basic编简谱玩的情景,这便是那个声霸卡还没上市的年代里,几乎是人们在PC上唯一可编的声音了。

汉阳Hann's Home 8620

C++ 字符串转浮点数,包括整数、小数和科学记数法

字符串转浮点数,其中科学记数法只用了e,大写E注意先转小写。小数向0趋近时直接输出0,大于DBL_MAX的输出inf错;输入非数字的情况,人为用pow()函数实现输出nan错。如果取得的数字串已用正则表达式检验过,可以删除掉两个注释符之间的代码。 #include <iostream> #include <iomanip> #include <vector> #include <cmath> using namespace std; #define is

汉阳Hann's Home 8476

C++ 整数转字符串

在写代码时,偶然把一个char型加上‘\0‘,结果发现其实加不加都无所谓,int都能转string型。比如: int c=48; string s0,s1; for (int i=0;i<10;i++){ s0=c+i; s1=c+i+'0'; //+'0'等价于+48 cout<<c+i+'\0'<<"~"<<s0<<"~"<<s1<<endl; } 显示结果: 48~0~` 49~1~a 5

汉阳Hann's Home 7518

C++ <windows.h>库函数探究初步:句柄操作

本文将对<windows.h>库函数做一番初步的探究,我在上一篇博文《C++ 调用windows系统DOS命令》中,定义过如下两个函数: void setColor(unsigned short foreColor=15,unsigned short bgColor=0) { //设置输出文本的前景色和背景色 HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hConsole,(for

汉阳Hann's Home 6079

C++ 各种数字类型的正则表达式

包括整数、小数、科学记数法的正则pattern

汉阳Hann's Home 5904

C++ 多种取整函数的使用和区别: ceil() floor() round() trunc() rint() nearbyint()

ceil()右向取整:数轴上右边最靠近的整数,“天花板”向大的方向取值 floor()左向取整:数轴上左边最靠近的整数,“地板”向小的方向取值 round() 四舍五入:先不管正负,四舍五入后只留下整数部分round(x) = floor(x+0.5) trunc()零向取整:先不管正负,直接舍掉小数部分只留下整数部分,向原点0的方向取值 rint() nearbyint() : 四种方法任选其一,由fegetround()配合设置见上表中的例程 例程一: #include &...

汉阳Hann's Home 5462

C++ 重载操作符 <<实现模拟输出语句: cout << endl;

#include <iostream> #define Stream std::basic_ostream<T1, T2>& template<typename T1, typename T2> Stream CRLF(Stream __os) { putchar('\n'); return __os.flush(); //清缓存 } int main(void) { std::cout << "第一行" << C...

汉阳Hann's Home 5273

C++ vector 容器的全排列算法 next_permutation

permute算法只要一个排序sort()加一个do-while循环就能轻松实现,算法有两个next_permutation(vector.begin(),vector.end()); prev_permutation(vector.begin(),vector.end()); 具体的用法以及区别,见文中源代码 ...

汉阳Hann's Home 5253

C++ <cstring>字符串库函数的自定义实现

字符串处理函数包括几大类可以满足对char*字符串大部分操作,需要包括头文件<cstring>或者<string.h>,选择几个仔细研究一下: #include <iostream> #include <cstring> #include <assert.h> using namespace std; int strLen(const char *s) { if (NULL==s) throw "Invalid argument"; //

汉阳Hann's Home 5233

深挖C++:类和对象(中)

(先进后出)

xys_678的博客 246

C++移动构造函数详解

移动构造函数是C++11引入的一种特殊构造函数,用于从临时对象(右值)"窃取"资源来初始化新对象,而不是进行昂贵的深拷贝。char* data;public:// 移动构造函数:参数是右值引用 &&// 关键:把源对象的资源置空。

拒绝AI文,努力在AI时代写出感动人心的好文章 392

ThunderKittens 深度解析:一个不基于 MLIR 的 C++ 模板 GPU DSL

Triton 是"让更多人能写 GPU kernel",ThunderKittens 是"让会写的人写得更爽"。前者用 MLIR 换易用性,后者用 C++ 模板换可控性。它们不是替代关系,而是覆盖了 GPU 编程光谱的两端。ThunderKittens 的出现,本质上是对"GPU DSL 必须基于 MLIR"这一默认假设的挑战。编译期类型系统本身就可以是一个强大的 DSL 基础设施,不需要中间 IR,不需要黑盒 pass,也能实现 tile 级抽象和零运行时开销。

Maxwell_Newton的博客 343

跟我学c++中级篇—类型定义的方式

本文系统阐述了编程中类型定义的重要性及c++中的实现方式。重点对比了宏定义、typedef与modern using三种机制,指出using在可读性、灵活性和模板支持上的优势,推荐优先使用。同时提醒开发者注意别名滥用、类型歧义、错误信息冗长等问题,强调统一规范与合理设计。最终结论:在现代c++开发中,应以using为主,兼顾简洁性与可维护性,避免陷入命名混乱与编译困境。

fpcc的专栏 82
上一篇: Rust 数据类型 之 结构体(Struct)
下一篇: Rust 数据类型 之 类C枚举 c-like enum
Hann Yang
Hann Yang 优质创作者: 编程框架技术领域 优质创作者: 编程框架技术领域 领域专家: 算法与数据结构技术领域 领域专家: 算法与数据结构技术领域
博客等级 码龄19年 4万+粉丝 1041原创
评论 78
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hann Yang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值