当前位置: 首页 > article >正文

c++基础算法练习(1)

1、每个判断条件return 0返回:

在这里插入图片描述

        if (savings >= house_price) { // 检查是否够买房子
            cout << years + 1 << endl; // 输出年数,+1因为years从0开始
            return 0; // 成功找到结果,退出程序
        }

2、裴波那契数列

在这里插入图片描述

动态规划(Dynamic Programming,简称DP)是一种数学方法和算法设计思想,主要用于求解复杂问题。它的核心思路是将原问题分解为相对简单的子问题,通过逐步解决这些子问题来达到最终目标。这种方法在多个领域有广泛应用,包括计算机科学、经济学、运筹学、管理学和生物信息学等

1、重叠子问题:
动态规划适用于那些可以分解成重复的子问题的问题。例如,在计算 Fibonacci 数列时,F(n) 可以通过 F(n-1) 和 F(n-2) 来表示,这样就形成了重叠的子问题。
2、最优子结构:
若一个问题的最优解包含其子问题的最优解,则该问题具有最优子结构性质。动态规划将此性质作为设计迭代或递归算法的基础。
3、记忆化存储:
为了避免重复计算动态规划中已解决的子问题,将它们的结果存储在某种数据结构中(如数组或哈希表)。这样,当再次需要这些子问题的结果时,可以直接查找而无需重新计算,从而显著提高效率。

#include <iostream>
using namespace std;
/*
输入项数
终止是1,2
*/
int feibo(int n) {
    if (n == 1 || n == 2) {
        return 1;
    }
    int a = 1, b = 1; // F(1) 和 F(2)
    for (int i = 3; i <= n; ++i) {
        int c = a + b; // F(n) = F(n-1) + F(n-2)
        a = b; // 更新 F(n-2)
        b = c; // 更新 F(n-1)
    }
    return b; // 返回 F(n)
}

int main() {
    int N;
    cin >> N ;
    //if()
    cout<<feibo(N);
    return 0;
}

3、鸡尾酒疗法

在这里插入图片描述

1、数组里面的变量用double

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int N;
    cin >> N; // 输入组数

    vector<double> sequ(N, 0); // 存储各疗法的有效率
    for(int i = 0; i < N; ++i) {
        int x, y;
        cin >> x >> y; // 输入总病例数和有效病例数
        double residue = 100.0 * y / x; // 计算有效率
        sequ[i] = residue; // 存储有效率
    }
    
    // 比较每个改进疗法与鸡尾酒疗法的效果
    for(int i = 1; i < N; ++i) {
        if (sequ[i] - sequ[0] > 5) {
            cout << "better" << endl; // 效果更好
        } else if (sequ[0] - sequ[i] > 5) {
            cout << "worse" << endl; // 效果更差
        } else {
            cout << "same" << endl; // 效果差不多
        }
    }

    return 0;
}

4、球弹跳高度的计算

在这里插入图片描述

1、这里的最后一次不要计算反弹的高度,要减去

1printf("%g\n", totalDistance)
//自动选择格式:%g 会根据数值的大小自动选择使用 f(浮点数)或 e(科学记数法)格式来输出。
#include <iostream>
#include <cstdio>
using namespace std;

int main() {
    double h, totalDistance = 0;
    cin >> h; // 输入初始高度
    double reboundHeight;

    for (int i = 0; i < 10; ++i) {
        totalDistance += h;  // 落下的距离
        reboundHeight = h / 2; // 计算反弹高度
        if(i!=9)
        {
         totalDistance += reboundHeight; // 加上反弹的距离
        }

        h = reboundHeight; // 更新高度为反弹高度
    }
    

    // 输出结果
    printf("%g\n", totalDistance); // 总经过的米数
    printf("%g\n", reboundHeight); // 第10次反弹的高度

    return 0;
}

5、角谷猜想

在这里插入图片描述

1、这里面要用到的值都需要反复更新
#include <iostream>
#include <cstdio>
using namespace std;

int main() {
    int n;
    cin >> n; // 输入正整数

    // 继续处理直到 n 等于 1
    while (n != 1) {
        if (n % 2 == 0) { // 偶数
            n = n / 2; // 更新 n
            printf("%d/%d=%d\n", n * 2, 2, n); // 显示除法过程
        } else { // 奇数
            n = n * 3 + 1; // 更新 n
            printf("%d*%d+%d=%d\n", (n - 1) / 3, 3, 1, n); // 显示乘法和加法过程
        }
    }
    cout << "End" << endl; // 输出结束标志
    return 0;
}

6、计分程序

在这里插入图片描述

1、按照题思路解题

#include <iostream>
using namespace std;

int calculateScore(int N) {
    int score = 0;
    
    if (N <= 10) {
        score = N * 6; // 前 10 道题,每道 6 分
    } else if (N <= 20) {
        score = 10 * 6 + (N - 10) * 2; // 前 10 道 6 分,后 N-10 道 2 分
    } else if (N <= 40) {
        score = 10 * 6 + 10 * 2 + (N - 20) * 1; // 前 20 道题按上述得分,后 N-20 道 1 分
    } else {
        score = 100; // 超过 40 道题,得 100 分
    }
    
    return score;
}

int main() {
    int N;
    while (cin >> N) { // 接收多组输入
        cout << calculateScore(N) << endl; // 输出每个学生的得分
    }
    return 0;
}

6、药房管理

在这里插入图片描述

#include <iostream>
#include <vector>

using namespace std;

int main() {
    int m; // 药品总量
    int n; // 病人数
    
    // 输入药品总量
    cin >> m;
    // 输入病人数
    cin >> n;

    vector<int> requests(n); // 用于存储每个病人的取药请求

    // 输入每个病人的请求数量
    for (int i = 0; i < n; ++i) {
        cin >> requests[i];
    }

    int not_satisfied_count = 0; // 未能取药的病人数

    // 遍历每个病人的请求
    for (int i = 0; i < n; ++i) {
        if (requests[i] <= m) { // 库存足够
            m -= requests[i]; // 扣除库存
        } else { // 库存不足
            not_satisfied_count++; // 记录未满足请求的病人
        }
    }

    // 输出未能取药的人数
    cout << not_satisfied_count << endl;

    return 0;
}


http://www.kler.cn/news/362205.html

相关文章:

  • 32 类和对象 · 中
  • 企业数字化转型的理论指南:构建未来企业的关键策略与实践路径
  • element-时间选择器单独写两个时间选择器并按照规则进行置灰选择,精确到时分秒
  • 用.NET开发跨平台应用程序采用 Avalonia 与MAUI如何选择
  • 企业级 RAG 全链路优化关键技术
  • 视频美颜平台是如何搭建的?基于直播美颜SDK源码的开发技术详解
  • Android SELinux——调试工具audio2allow介绍(十三)
  • Linux系列-Linux的常见指令(三)
  • 错误0x80070522:客户端没有所需的特权
  • C++ set和map的模拟实现
  • 在Debian上安装向日葵
  • 深度学习-卷积神经网络-基于VGG16模型, 实现猫狗二分类(文末附带数据集下载链接, 长期有效)
  • oracle_查询建表语句
  • 【毕业设计】基于SpringBoot的网上商城系统
  • 【C语言刷力扣】2006.差的绝对值为K的数对数目
  • CTFHUB技能树之SQL——布尔盲注
  • 前端模块化技术 IIFE、CMD、UMD
  • 智能去毛刺:2D视觉引导机器人如何重塑制造业未来
  • MySQL 指定字段排序
  • 信息搜集 --前端js打点
  • 九、SQL 进阶之路:深入探索数据库查询的艺术
  • Chromium html<textarea>c++接口定义
  • 刷爆leetccode Day7 DP
  • 从程序小白到CTO的10年成长之路(7)
  • 大语言模型赋能病理AI,自动从报告文本中分类TNM分期|顶刊精析·24-10-17
  • [k8s理论知识]5.docker基础(四)Dockerfile构建