吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 702|回复: 17
收起左侧

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

  [复制链接]
jtwc 发表于 2023-9-29 09:26
各位老师,
[C++] 纯文本查看 复制代码
#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[i] - nums[i - 1];
			if (cur > 0 && pre <= 0) {
				valleyValue = nums[i - 1];
			}
			else if (cur < 0 && pre >= 0) {
				peakValue = nums[i - 1];
			}
			pre = cur;
		}
		// 处理最后一个元素
		if (nums.size() >= 2) {
			if (nums[nums.size() - 1] > nums[nums.size() - 2]) {
				peakValue = nums[nums.size() - 1];
			}
			else if (nums[nums.size() - 1] < nums[nums.size() - 2]) {
				valleyValue = nums[nums.size() - 1];
			}
		}
	}
};

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[i - 1];
            if (cur > 0 && pre <= 0) {
                valleyValue = nums[i - 1];
            }
            else if (cur < 0 && pre >= 0) {
                peakValue = nums[i - 1];
            }
            pre = cur;
        }
        
        // 处理最后一个元素
        if (nums.size() >= 2) {
            if (nums[nums.size() - 1] > nums[nums.size() - 2]) {
                peakValue = nums[nums.size() - 1];
            }
            else if (nums[nums.size() - 1] < nums[nums.size() - 2]) {
                valleyValue = nums[nums.size() - 1];
            }
        }
        
        // 使用控制值
        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的控制值。然后,你可以在函数的适当位置使用该控制值,比如在最后输出语句中打印出来。当然,你可以根据需要对控制值进行其他操作。

免费评分

参与人数 2吾爱币 -2 热心值 +1 收起 理由
jtwc + 1 + 1 热心回复!
苏紫方璇 -3 本区禁止使用ai解答进行回复

查看全部评分

 楼主| 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条件即可

#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[i] - nums[i - 1];
            if (cur > 0 && pre <= 0 && nums[i - 1] <= valleyValue + A)
            {
                valleyValue = nums[i - 1];
            }
            else if (cur < 0 && pre >= 0 && nums[i - 1] >= peakValue - A)
            {
                peakValue = nums[i - 1];
            }
            pre = cur;
        }
        // 处理最后一个元素
        if (nums.size() >= 2)
        {
            if (nums[nums.size() - 1] > nums[nums.size() - 2] && nums[nums.size() - 1] >= peakValue - A)
            {
                peakValue = nums[nums.size() - 1];
            }
            else if (nums[nums.size() - 1] < nums[nums.size() - 2] && nums[nums.size() - 1] <= valleyValue + A)
            {
                valleyValue = nums[nums.size() - 1];
            }
        }
    }
};

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;
}

我实测没问题(忽略编码问题)

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
[md]其实只要改一下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吧
我哪里搞错了也见谅哈
 楼主| 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
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 20:02

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表