jtwc 发表于 2023-9-29 09:26

c++贪心算法如何加1个控制值呢?

各位老师,#include <iostream>
#include <vector>

class Solution {
public:
        void findPeakValley(const std::vector<int>& nums, int& peakValue, int& valleyValue) {
                int cur = 0, pre = 0;
                for (int i = 1; i < nums.size(); i++) {
                        int cur = nums - nums;
                        if (cur > 0 && pre <= 0) {
                                valleyValue = nums;
                        }
                        else if (cur < 0 && pre >= 0) {
                                peakValue = nums;
                        }
                        pre = cur;
                }
                // 处理最后一个元素
                if (nums.size() >= 2) {
                        if (nums > nums) {
                                peakValue = nums;
                        }
                        else if (nums < nums) {
                                valleyValue = nums;
                        }
                }
        }
};

int main() {
        std::vector<int> nums = { 1, 17, 13, 5, 10, 15, 11, 16, 8, 11 };
        Solution solution;
        int peakValue = 0;
        int valleyValue = 0;
        solution.findPeakValley(nums, peakValue, valleyValue);

        if (peakValue != 0) {
                std::cout << "最后一个波峰值为: " << peakValue << std::endl;
        }
        else {
                std::cout << "未找到波峰" << std::endl;
        }

        if (valleyValue != 0) {
                std::cout << "最后一个波谷值为: " << valleyValue << std::endl;
        }
        else {
                std::cout << "未找到波谷" << std::endl;
        }
        system("pause");
        return 0;
}c++贪心算法如何加1个控制值呢?下面是找波峰、波谷代码,给上面的代码加入限制值A=4的代码,小于波峰-4的数才是波谷,大于波谷+4的数才是波峰,该如何写呢?谢谢了

yanyujiangnanya 发表于 2023-9-29 11:03

如果你想要添加一个控制值,你可以在findPeakValley函数的参数列表中加入一个额外的整型变量,比如int controlValue。然后在程序中对该变量进行适当的赋值和使用。

下面是修改后的代码示例:#include <iostream>
#include <vector>

class Solution {
public:
    void findPeakValley(const std::vector<int>& nums, int& peakValue, int& valleyValue, int controlValue) {
      int cur = 0, pre = 0;
      for (int i = 1; i < nums.size(); i++) {
            int cur = nums - nums;
            if (cur > 0 && pre <= 0) {
                valleyValue = nums;
            }
            else if (cur < 0 && pre >= 0) {
                peakValue = nums;
            }
            pre = cur;
      }
      
      // 处理最后一个元素
      if (nums.size() >= 2) {
            if (nums > nums) {
                peakValue = nums;
            }
            else if (nums < nums) {
                valleyValue = nums;
            }
      }
      
      // 使用控制值
      std::cout << "控制值为: " << controlValue << std::endl;
    }
};

int main() {
    std::vector<int> nums = { 1, 17, 13, 5, 10, 15, 11, 16, 8, 11 };
    Solution solution;
    int peakValue = 0;
    int valleyValue = 0;
    int controlValue = 100;// 添加一个控制值并初始化

    solution.findPeakValley(nums, peakValue, valleyValue, controlValue);

    if (peakValue != 0) {
      std::cout << "最后一个波峰值为: " << peakValue << std::endl;
    }
    else {
      std::cout << "未找到波峰" << std::endl;
    }

    if (valleyValue != 0) {
      std::cout << "最后一个波谷值为: " << valleyValue << std::endl;
    }
    else {
      std::cout << "未找到波谷" << std::endl;
    }
   
    system("pause");
    return 0;
}
在上面的代码中,我添加了一个名为controlValue的整型变量,并在findPeakValley函数调用时传入了一个值为100的控制值。然后,你可以在函数的适当位置使用该控制值,比如在最后输出语句中打印出来。当然,你可以根据需要对控制值进行其他操作。

jtwc 发表于 2023-9-29 11:32

yanyujiangnanya 发表于 2023-9-29 11:03
如果你想要添加一个控制值,你可以在findPeakValley函数的参数列表中加入一个额外的整型变量,比如int cont ...

非常感谢老师,我试试,谢谢老师

jtwc 发表于 2023-9-29 11:38

本帖最后由 jtwc 于 2023-9-29 11:43 编辑

yanyujiangnanya 发表于 2023-9-29 11:03
如果你想要添加一个控制值,你可以在findPeakValley函数的参数列表中加入一个额外的整型变量,比如int cont ...
老师出来的结果咋不正确呢? int controlValue = 4;std::vector<int> nums = { 1, 17, 13, 5, 10, 15, 11, 16, 8, 11, 9 };最后一个波峰值为: 11   最后一个波谷值为: 9 ,   最后一个波峰值应该是16,最后一个波谷值应该是8

hrh123 发表于 2023-9-29 12:19

jtwc 发表于 2023-9-29 11:38
老师出来的结果咋不正确呢? int controlValue = 4;std::vector nums = { 1, 17, 13, 5, 10, 15, 11, 1 ...

其实只要改一下if条件即可
```cpp
#include <iostream>
#include <vector>

class Solution
{
public:
    void findPeakValley(const std::vector<int> &nums, int &peakValue, int &valleyValue, int A)
    {
      int cur = 0, pre = 0;
      for (int i = 1; i < nums.size(); i++)
      {
            int cur = nums - nums;
            if (cur > 0 && pre <= 0 && nums <= valleyValue + A)
            {
                valleyValue = nums;
            }
            else if (cur < 0 && pre >= 0 && nums >= peakValue - A)
            {
                peakValue = nums;
            }
            pre = cur;
      }
      // 处理最后一个元素
      if (nums.size() >= 2)
      {
            if (nums > nums && nums >= peakValue - A)
            {
                peakValue = nums;
            }
            else if (nums < nums && nums <= valleyValue + A)
            {
                valleyValue = nums;
            }
      }
    }
};

int main()
{
    std::vector<int> nums = {1, 17, 13, 5, 10, 15, 11, 16, 8, 11};
    Solution solution;
    int peakValue = 0;
    int valleyValue = 0;
    int A = 4; // 限制值
    solution.findPeakValley(nums, peakValue, valleyValue, A);

    if (peakValue != 0)
    {
      std::cout << "最后一个波峰值为: " << peakValue << std::endl;
    }
    else
    {
      std::cout << "未找到波峰" << std::endl;
    }

    if (valleyValue != 0)
    {
      std::cout << "最后一个波谷值为: " << valleyValue << std::endl;
    }
    else
    {
      std::cout << "未找到波谷" << std::endl;
    }
    system("pause");
    return 0;
}
```
我实测没问题(忽略编码问题)
```text
PS E:\> g++ main.cpp -o main
PS E:\> ./main
鏈?鍚庝竴涓尝宄板?间负: 16
鏈?鍚庝竴涓尝璋峰?间负: 8
请按任意键继续. . .
PS E:\>
```

jtwc 发表于 2023-9-29 13:40

hrh123 发表于 2023-9-29 12:19
其实只要改一下if条件即可
```cpp
#include


谢谢老师,老师队列{ 1, 17, 13, 5, 10, 15, 11, 16, 8, 11, 9 },输出为:最后一个波峰值为: 16
最后一个波谷值为: 9, 最后一个波谷值应该为:8

hrh123 发表于 2023-9-29 13:57

jtwc 发表于 2023-9-29 13:40
谢谢老师,老师队列{ 1, 17, 13, 5, 10, 15, 11, 16, 8, 11, 9 },输出为:最后一个波峰值为: 16
最后一 ...

我现在人在外面,不方便测试,大致看了下,应该是哪个地方等号没加对,你自己改下试试

jtwc 发表于 2023-9-29 14:06

hrh123 发表于 2023-9-29 13:57
我现在人在外面,不方便测试,大致看了下,应该是哪个地方等号没加对,你自己改下试试

谢谢老师,我再试试

hrh123 发表于 2023-9-29 14:53

jtwc 发表于 2023-9-29 14:06
谢谢老师,我再试试

等一下,最后1个波谷好像就是9吧{:301_1009:}
我哪里搞错了也见谅哈{:301_1007:}

jtwc 发表于 2023-9-29 15:03

hrh123 发表于 2023-9-29 14:53
等一下,最后1个波谷好像就是9吧
我哪里搞错了也见谅哈

老师,最后一个波峰值为: 16,之后是8,8比16小8是波谷,之后是11,11-8<4,还是波谷,之后是9,11-9<4,还是波谷,8、11、9最小值为波谷就是8
页: [1] 2
查看完整版本: c++贪心算法如何加1个控制值呢?