gpt4 book ai didi

c++ - 如何摆脱固定标记值 (-32767)?

转载 作者:行者123 更新时间:2023-11-30 02:08:15 24 4
gpt4 key购买 nike

下面是我编写的程序,用于从给定数组中查找子数组的总和,但是不知何故我不知道如何摆脱哨兵值(在本例中为 -32767)?我该如何优化它?以及如何跟踪最大子数组的范围?

#define EVALUE -32767

using namespace std;

int findMaxSubArray(vector<int>,int low,int high);
int findMaxSubArray_Mid(vector<int>,int low,int high);

int main()
{
vector<int> v;
int j=0;

cout << "Enter array values(-32767 to end): ";
while(1)
{
cin >> j;
if (EVALUE==j)
break;
v.push_back(j);
}

if(v.size()!=0)
cout << "Max sum is: " << findMaxSubArray(v,0,v.size()-1) << "\n";
else
cout << "No array elements entered, exiting...\n";

system("pause");
return 0;
}

int findMaxSubArray(vector<int> v, int low, int high)
{
if(low==high) return v[low];

int max_mid_sum=findMaxSubArray_Mid(v,low,high);
int max_left_sum=findMaxSubArray(v,low,(low+high)/2);
int max_right_sum=findMaxSubArray(v,(low+high)/2+1,high);

if (max_mid_sum>max_left_sum) return (max_mid_sum>max_right_sum?max_mid_sum:max_right_sum);
else return(max_left_sum>max_right_sum?max_left_sum:max_right_sum);
}

int findMaxSubArray_Mid(vector<int> v,int low,int high)
{
int mid=high/2;
int max_left_sum=0;
int max_right_sum=0;
int sum=0;

for(int i=mid;i>=low;--i)
{
sum+=v[i];
if(sum>max_left_sum)
{
max_left_sum=sum;
}
}

sum=0;
for(int i=mid+1;i<=high;++i)
{
sum+=v[i];
if(sum>max_right_sum)
{
max_right_sum=sum;
}
}

return (max_right_sum+max_left_sum);
}

最佳答案

从文本文件中读取时,cin 将获得的最后一个字符是“EOF”字符,或文件结束符。您可以在命令行中使用 control+d 将此字符发送到您的程序。您将要检查这个而不是 -32767。

这是一个基本程序,可以为您的问题确定一个简单的修复方法:

#include <vector>
#include <iostream>

using namespace std;

int main()
{
vector<int> v;
int j;

cout << "Enter array values (Control+D (EOF) to end): ";
cin >> j;
while(cin.good())
{
v.push_back(j);
cin >> j;
}

return 0;
}

如果你想变得非常聪明,你可以使用下面的代码,它会直接将内存中 cin 处的内容(从开始到 EOF)插入到你的 vector 中。就运行时间而言,这可能比您的解决方案和上述解决方案更快。

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

using namespace std;

int main()
{
vector<int> v;
cout << "Enter array values (Control+D (EOF) to end): ";

istream_iterator<int> in(cin);
istream_iterator<int> eof;
copy(in, eof, back_inserter(v));

ostream_iterator<int> out(cout, "\n");
copy(v.begin(), v.end(), out);

return 0;
}

关于c++ - 如何摆脱固定标记值 (-32767)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7112215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com