李畅_2404020219_网络24_2 level
获赞
3
粉丝
2
关注
3
看过 TA
45
哈尔滨理工大学
2028
C++
IP属地:黑龙江
oi!
私信
关注
素数判断函数:定义一个函数,接收一个整数作为参数,在函数内部,从2开始到该数的平方根(取整),依次用取余运算判断能否整除当前参数,如果都不能整除,返回 true,表示是素数,否则返回 false。回文数判断函数:可以采用两种方式,一种是将整数先转换为字符串,然后利用双指针(一个指向字符串开头,一个指向末尾)同时向中间移动,比较对应字符是否相等,如果都相等则是回文数;另一种是不借助字符串,通过数学运算,不断取出原数的末尾数字,构建出反转后的数字,最后对比原数和反转后的数字是否相等来判断是否为回文数。这里以第二种方式举例。定义一个函数,接收一个整数作为参数,先处理特殊情况(如负数等),然后利用循环取出末尾数字构建反转数,最后比较原数和反转数是否相等,相等则返回 true,表示是回文数,否则返回 false。代码#include #include using namespace std;// 判断是否为素数的函数bool isPrime(int num) {    if (num < 2) return false;    for (int i = 2; i <= sqrt(num); ++i) {        if (num % i == 0) return false;    }    return true;}// 判断是否为回文数的函数bool isPalindrome(int num) {    int original = num;    int reversed = 0;    while (num > 0) {        reversed = reversed * 10 + num % 10;        num /= 10;    }    return original == reversed;}int main() {    int start, end;    cout << "请输入起始整数: ";    cin >> start;    cout << "请输入结束整数: ";    cin >> end;    cout << "在 " << start << " 到 " << end << " 范围内既是素数又是回文数的有: ";    for (int n = start; n <= end; ++n) {        if (isPrime(n) && isPalindrome(n)) {            cout << n << " ";        }    }    cout << endl;    return 0;}
0 点赞 评论 收藏
分享
#include #include using namespace std;bool findSaddle(const vector>& m) {    int r = m.size();    if (r == 0) return false;    int c = m[0].size();    for (int a = 0; a < r; ++a) {        int b = 0;        for (int d = 1; d < c; ++d) {            if (m[a][d] > m[a][b]) {                b = d;            }        }        bool isSaddle = true;        for (int e = 0; e < r; ++e) {            if (m[e][b] < m[a][b]) {                isSaddle = false;                break;            }        }        if (isSaddle) {            cout << "鞍点坐标为 (" << a << ", " << b << "), 值为: " << m[a][b] << endl;            return true;        }    }    cout << "该矩阵不存在鞍点" << endl;    return false;}int main() {    vector> m = {            {1, 2, 3},            {4, 5, 6},            {7, 8, 9}    };    findSaddle(m);    return 0;}
0 点赞 评论 收藏
分享
汉诺塔(Tower of Hanoi)是一个经典的数学谜题与递归算法应用场景。它由三根柱子(通常标记为A、B、C)和若干个不同大小的圆盘组成,开始时所有圆盘按照从大到小的顺序堆叠在一根柱子(比如A柱)上,目标是将所有圆盘从起始柱子移动到另一根柱子(比如C柱),移动过程需遵循以下规则:1.每次只能移动一个圆盘。2.大圆盘不能放在小圆盘上面汉诺塔问题非常适合用递归的思想来解决,具体思路如下:1.递归的终止条件:当只有一个圆盘时,直接将这个圆盘从起始柱子移动到目标柱子即可,这就是递归的最底层情况,也就是递归终止条件。2.递归的拆解步骤:首先,我们需要把 n - 1 个圆盘从柱子 A 借助柱子 C 移动到柱子 B,这相当于解决了一个规模更小的汉诺塔问题(把上面 n - 1 个圆盘看成一个整体来移动),调用自身函数来处理这个子问题。接着,将剩下的那个最大的圆盘从柱子 A 直接移动到柱子 C。最后,再把 n - 1 个圆盘从柱子 B 借助柱子 A 移动到柱子 C,同样是调用自身来处理这个子问题。#include #include using namespace std;// 函数用于移动圆盘,参数分别表示圆盘数量、起始柱子、中间柱子、目标柱子void hanoiTower(int n, string from, string via, string to) {    if (n == 1) {        // 当只有一个圆盘时,直接从起始柱子移动到目标柱子        cout << "将圆盘 1 从 " << from << " 移动到 " << to << endl;        return;    }    // 先把 n - 1 个圆盘从起始柱子借助目标柱子移动到中间柱子    hanoiTower(n - 1, from, to, via);    // 再把最大的圆盘从起始柱子移动到目标柱子    cout << "将圆盘 " << n << " 从 " << from << " 移动到 " << to << endl;    // 最后把 n - 1 个圆盘从中间柱子借助起始柱子移动到目标柱子    hanoiTower(n - 1, via, from, to);}int main() {    int numDisks;    cout << "请输入圆盘的数量:";    cin >> numDisks;    // 调用函数开始解决汉诺塔问题,初始柱子为 "A",中间柱子为 "B",目标柱子为 "C"    hanoiTower(numDisks, "A", "B", "C");    return 0;}
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
12-20 10:12
已编辑
哈尔滨理工大学 C++
原理思想• 分治思想:快速排序遵循分治策略,将一个大问题(对整个数组排序)分解成多个小问题(对划分后的子数组排序)。先选择数组中的一个元素作为“基准”元素,比如常选第一个或最后一个元素。• 划分操作:通过双指针法(左右指针),从数组两端开始扫描,将小于基准的元素移到左边,大于基准的元素移到右边,最终确定基准元素的正确位置,使数组以基准为界分为左右两部分,左边元素都小于等于它,右边元素都大于等于它。代码实现要点• 划分函数:    传入待排序数组、起始索引与结束索引,函数内通过指针移动交换元素来完成划分,返回基准元素最终位置索引,便于后续递归调用。    需注意指针移动条件及元素交换逻辑,避免越界等错误。• 递归调用:    基于划分后基准元素的位置,分别对左右子数组进行递归排序,递归的边界条件通常是子数组长度大于1(即起始索引小于结束索引)。    合理设置递归终止情况,防止无限递归。代码:#include #include using namespace std;// 交换两个元素的函数void swap(int& a, int& b) {    int temp = a;    a = b;    b = temp;}// 划分函数,选择一个基准元素,将数组划分为两部分int partition(vector& arr, int low, int high) {    int pivot = arr[high];  // 通常选择最后一个元素作为基准    int i = low - 1;    for (int j = low; j         if (arr[j]             i++;            swap(arr[i], arr[j]);        }    }    swap(arr[i + 1], arr[high]);    return i + 1;}// 快速排序递归函数void quickSort(vector& arr, int low, int high) {    if (low         int pivotIndex = partition(arr, low, high);        quickSort(arr, low, pivotIndex - 1);        quickSort(arr, pivotIndex + 1, high);    }}// 打印数组元素的函数,方便查看排序结果void printArray(const vector& arr) {    for (int num : arr) {        cout     }    cout }int main() {    vector arr = { 12, 11, 13, 5, 6 };    int n = arr.size();    quickSort(arr, 0, n - 1);    cout     printArray(arr);    return 0;}
0 点赞 评论 收藏
分享
12-20 10:14
已编辑
哈尔滨理工大学 C++
今天学习面向对象的C语言编程,收获颇丰,记录下关键知识点。首先,利用结构体模拟类。比如定义struct ClassName,结构体里存放代表对象属性的成员变量,像模拟“学生”类时,可设char name[20];存姓名、int age;表年龄等成员。#include #include // 定义一个简单的表示人的类class Person {private:    std::string name;    int age;public:    // 构造函数,用于初始化对象    Person(const std::string& n, int a) : name(n), age(a) {}    // 成员函数,用于输出人的信息    void showInfo() {        std::cout     }};int main() {    Person p("张三", 25);    p.showInfo();    return 0;}接着是函数指针实现方法。定义好结构体后,通过typedef定义函数指针类型,再在结构体里添加相应函数指针成员,以此关联操作数据的函数,像typedef int (*FuncPtr)(struct ClassName*);,然后在结构体里添加FuncPtr func;用于指向具体的函数实现。关于继承,借助结构体嵌套来达成。例如定义父结构体struct Parent,子结构体struct Child里包含struct Parent成员,通过指针操作可访问父结构体中的元素,以此体现继承关系及复用父类的属性等,不过要注意内存布局和指针偏移的正确处理。
0 点赞 评论 收藏
分享
12-20 10:15
已编辑
哈尔滨理工大学 C++
0 点赞 评论 收藏
分享
关注他的用户也关注了:
牛客网
牛客企业服务