C++ 查找数组中数字符号的变化量
基本上,我有一个给定“x”数字的数组,我必须输出该数组的数字中符号变化的次数 例如,阵列是: 2-4 5 6 7-2 5-7 输出应该是5。为什么?因为符号第一次在-4处变化,第二次在5处变化,第三次在-2处变化,第四次在5处变化,最后一次在-7处变化。总共5次 到目前为止,我已经做到了这一点,但这并不完美:C++ 查找数组中数字符号的变化量,c++,arrays,numbers,sign,C++,Arrays,Numbers,Sign,基本上,我有一个给定“x”数字的数组,我必须输出该数组的数字中符号变化的次数 例如,阵列是: 2-4 5 6 7-2 5-7 输出应该是5。为什么?因为符号第一次在-4处变化,第二次在5处变化,第三次在-2处变化,第四次在5处变化,最后一次在-7处变化。总共5次 到目前为止,我已经做到了这一点,但这并不完美: #include <iostream> using namespace std; int main() { int a[50],n,cs=0,ha=0; cin >
#include <iostream>
using namespace std;
int main()
{
int a[50],n,cs=0,ha=0;
cin >> n;
for (int i=0;i<n;i++)
{
cin >> a[i];
}
for (int j=1;j<=n;j++)
{
if(a[j]<0 && a[j-1]>0)
cs++;
else if(a[j]>0 && a[j-1]<0)
cs++;
}
cout << cs << endl;
return 0;
}
#包括
使用名称空间std;
int main()
{
int a[50],n,cs=0,ha=0;
cin>>n;
对于(int i=0;i>a[i];
}
对于(int j=1;j0&&a[j-1]来说,您的问题是您正在运行未初始化的内存,这会导致未定义的行为。您通过输入循环中的a[n-1]
初始化a[0]
,然后从a[0]
(使用j=1和a[j-1]
)读取到a[n]
(j=n和a[j]
)在您的计算循环中
只需将其更改为j
您的第二个循环应在j
处终止。如果STL是您的一个选项,您可以使用std::nexture\u find
。这是您在完整程序中使用它的方式:
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
vector<int> v { 1 , 3, -5, 8, -9, -10, 4 };
auto signSwitch = [] (int x, int y) { return (abs(x) == x) ^ (abs(y) == y); };
int cnt = 0;
auto i = adjacent_find(begin(v), end(v), signSwitch);
while (i != end(v))
{
cnt++;
i = adjacent_find(i + 1, end(v), signSwitch);
}
cout << cnt;
}
#包括
#包括
#包括
使用名称空间std;
int main()
{
向量v{1,3,-5,8,-9,-10,4};
自动签名开关=[](intx,inty){return(abs(x)=x)^(abs(y)=y);};
int-cnt=0;
自动i=相邻查找(开始(v)、结束(v)、标志开关);
而(i!=结束(v))
{
cnt++;
i=相邻_查找(i+1,结束(v),标志开关);
}
cout在第二个for循环中,您不应该让j转到“请帮助”?什么不起作用?哪一行有问题?您的预期输出有什么问题?whathaveyoutried.com访问a[n]< /代码>是未定义的行为。我的问题是,我的代码工作不正常,它显示出一个不正确的输出。您必须考虑一个值<代码> 0代码>代码>。您应该,例如,认为它是肯定的。然后,更改<代码> 0 < /代码>到<代码> = 0 < /代码>来处理这个问题。管道。考虑两个大的整数;它们会溢出。我会使用一些类似于<代码>(x>=0)=(y>=0)< /> >有趣的应用<代码>邻接查找< /COD>。@ LeMEES:是的。这是我脑海中想到的最快的事情。我永远记不住<代码> sgn()/<代码>是不是标准。@ ANDYPROWL更改J。
for (int j=1;j<n;j++)