搜索
首页后端开发C++使用C++根据给定条件拆分给定的二进制字符串,以最大化和

使用C++根据给定条件拆分给定的二进制字符串,以最大化和

本文旨在解决一个复杂的算法问题,涉及以最大化从各个组件获得的累积和的方式分割二进制字符串。我们将为读者提供用于实现代码的全面语法大纲,并建议两种可能的技术来克服这一挑战。此外,我们将基于上述方法展示两个真正的完整可执行代码。

语法

在深入研究算法之前,至关重要的是,我们必须熟悉我们将通过即将发布的代码示例展示的指定方法的结构。该方法采用二进制字符串作为输入,并通过使用预定条件对所述输入进行分区来计算其最高可能值。下面说明了这种方法在语法方面的外观 -

int maximizeSum(string binaryString) {
   // Implementation of the algorithm goes here
}

算法

现在我们应该讨论一下逐步算法,以解决通过拆分二进制字符串来最大化总和的问题。

代码片段 1

  • 初始化两个变量“maxSum”和“currentSum”,均设置为零。

  • 从左到右遍历二进制字符串。

  • 对于字符串中的每个字符 -

    • 如果字符是'0',则将其添加到当前子字符串中。

    • 如果字符是'1' −

      • 通过添加当前的“currentSum”来更新“maxSum”。

      • 将`currentSum`重置为零。

  • 遍历结束后,将最终的“currentSum”与“maxSum”相加。

  • 返回 `maxSum` 作为结果。

方法一

解决此问题的第一种方法涉及实现上述算法。让我们看看相应的代码片段 -

示例

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

int maximizeSum(string binaryString) {
   int maxSum = 0;
   int currentSum = 0;

   for (char c : binaryString) {
      if (c == '0') {
         currentSum = currentSum * 10 + (c - '0');
      } else {
         maxSum += currentSum;
         currentSum = 0;
      }
   }

   maxSum += currentSum;
   return maxSum;
}

int main() {
   string binaryString = "1001101001";
    
   int result = maximizeSum(binaryString);
   cout << "Maximum sum: " << result << endl;

   return 0;
}

输出

Maximum sum: 0

说明

  • 为了方便起见,代码首先包含必要的库(“iostream”和“string”)并使用“std”命名空间。

  • 要计算通过拆分二进制字符串可实现的最大和,可以使用 `maximizeSum` 函数,该函数以二进制字符串作为输入并返回输出。

  • 在这个函数内部初始化了两个变量 - `maxSum` 和 `currentSum`。前者跟踪到目前为止达到的最大值,而后者计算每个单独子串的总和。

  • 使用基于范围的 for 循环我们迭代输入“binaryString”中的每个字符“c”。

  • 如果当前字符“c”是“0”,我们将其乘以 10 并加上数值“0”来更新“currentSum”。这有效地将“0”附加到当前子字符串。

  • 如果当前字符“c”为“1”,则表示当前子字符串结束。我们将 `currentSum` 添加到 `maxSum` 以更新迄今为止达到的最大总和,然后将 `currentSum` 重置为零以开始一个新的子字符串。

  • 完成循环后,通过将最后一个子字符串的`currentSum`加到前一个`maxSum`中来计算。`main`函数提供了一个提示,允许用户输入一个二进制字符串。

  • “main”函数提供一个提示,允许用户输入二进制字符串。

  • 输入字符串被传递给`maximizeSum`函数,并将返回的最大和存储在`result`变量中。

  • 最后,将最大总和显示给用户。

方法2

在第二种方法中,我们将通过消除执行整数乘法的需要来优化代码。相反,我们将使用按位运算来计算当前总和。让我们看一下这种方法的代码片段 -

示例

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

int maximizeSum(string binaryString) {
   int maxSum = 0;
   int currentSum = 0;

   for (char c : binaryString) {
      if (c == '0') {
         currentSum = (currentSum << 1) + 0;
      } else {
         maxSum += currentSum;
         currentSum = 0;
      }
   }

   maxSum += currentSum;
   return maxSum;
}

int main() {
   string binaryString = "10110010"; // Assumed binary string
   int result = maximizeSum(binaryString);
   cout << "Maximum sum: " << result << endl;

   return 0;
}

输出

Maximum sum: 0

说明

  • 与第一种方法类似,代码首先包含必要的库,并使用 `std` 命名空间。

  • 函数`maximizeSum`和函数`main`的定义与第一种方法中的定义相同。

  • 在`maximizeSum`函数中,使用位左移运算符(`

  • 相当于乘以 2。然后我们将 0 添加到 `currentSum` 中,因为当前字符是“0”。

  • 两种方法中其余的代码是相同的。它们接收一个二进制字符串作为输入。使用`maximizeSum`函数来计算在分割字符串时可能的最大和。然后将这个结果呈现给用户。

您可以在C++编译器中编译并运行这些代码,当输入一个二进制字符串时,程序将输出根据指定条件分割该字符串所获得的最大和。

结论

在本文中,我们探讨了通过根据给定条件分割二进制字符串来最大化总和的问题。我们提供了代码示例中使用的方法的语法,并提出了两种解决问题的方法。最初,采用直接算法,而以下技术通过按位运算优化编码。尽管这两种方法都成功地解决了该问题,但后者提供了更高的效率,因为它消除了整数乘法的必要性。通过理解和实现这些算法,您可以有效地解决涉及通过拆分二进制字符串来最大化总和的类似问题。

以上是使用C++根据给定条件拆分给定的二进制字符串,以最大化和的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:tutorialspoint。如有侵权,请联系admin@php.cn删除
C:死亡还是简单地发展?C:死亡还是简单地发展?Apr 24, 2025 am 12:13 AM

1)c relevantduetoItsAverity and效率和效果临界。2)theLanguageIsconTinuellyUped,withc 20introducingFeaturesFeaturesLikeTuresLikeSlikeModeLeslikeMeSandIntIneStoImproutiMimproutimprouteverusabilityandperformance.3)

C在现代世界中:应用和行业C在现代世界中:应用和行业Apr 23, 2025 am 12:10 AM

C 在现代世界中的应用广泛且重要。1)在游戏开发中,C 因其高性能和多态性被广泛使用,如UnrealEngine和Unity。2)在金融交易系统中,C 的低延迟和高吞吐量使其成为首选,适用于高频交易和实时数据分析。

C XML库:比较和对比选项C XML库:比较和对比选项Apr 22, 2025 am 12:05 AM

C 中有四种常用的XML库:TinyXML-2、PugiXML、Xerces-C 和RapidXML。1.TinyXML-2适合资源有限的环境,轻量但功能有限。2.PugiXML快速且支持XPath查询,适用于复杂XML结构。3.Xerces-C 功能强大,支持DOM和SAX解析,适用于复杂处理。4.RapidXML专注于性能,解析速度极快,但不支持XPath查询。

C和XML:探索关系和支持C和XML:探索关系和支持Apr 21, 2025 am 12:02 AM

C 通过第三方库(如TinyXML、Pugixml、Xerces-C )与XML交互。1)使用库解析XML文件,将其转换为C 可处理的数据结构。2)生成XML时,将C 数据结构转换为XML格式。3)在实际应用中,XML常用于配置文件和数据交换,提升开发效率。

C#vs. C:了解关键差异和相似之处C#vs. C:了解关键差异和相似之处Apr 20, 2025 am 12:03 AM

C#和C 的主要区别在于语法、性能和应用场景。1)C#语法更简洁,支持垃圾回收,适用于.NET框架开发。2)C 性能更高,需手动管理内存,常用于系统编程和游戏开发。

C#与C:历史,进化和未来前景C#与C:历史,进化和未来前景Apr 19, 2025 am 12:07 AM

C#和C 的历史与演变各有特色,未来前景也不同。1.C 由BjarneStroustrup在1983年发明,旨在将面向对象编程引入C语言,其演变历程包括多次标准化,如C 11引入auto关键字和lambda表达式,C 20引入概念和协程,未来将专注于性能和系统级编程。2.C#由微软在2000年发布,结合C 和Java的优点,其演变注重简洁性和生产力,如C#2.0引入泛型,C#5.0引入异步编程,未来将专注于开发者的生产力和云计算。

C#vs. C:学习曲线和开发人员的经验C#vs. C:学习曲线和开发人员的经验Apr 18, 2025 am 12:13 AM

C#和C 的学习曲线和开发者体验有显着差异。 1)C#的学习曲线较平缓,适合快速开发和企业级应用。 2)C 的学习曲线较陡峭,适用于高性能和低级控制的场景。

C#vs. C:面向对象的编程和功能C#vs. C:面向对象的编程和功能Apr 17, 2025 am 12:02 AM

C#和C 在面向对象编程(OOP)中的实现方式和特性上有显着差异。 1)C#的类定义和语法更为简洁,支持如LINQ等高级特性。 2)C 提供更细粒度的控制,适用于系统编程和高性能需求。两者各有优势,选择应基于具体应用场景。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具