Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/152.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 查找数组中数字符号的变化量_C++_Arrays_Numbers_Sign - Fatal编程技术网

C++ 查找数组中数字符号的变化量

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 >

基本上,我有一个给定“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 >> 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++)