C ++算法练习

时间:2015-07-07 21:25:15

标签: c++ arrays algorithm

我对我的一个问题有疑问。 我有一个包含n个元素的数组,我必须看看这个是否是由这个规则制作的: 阳性阴性阳性阳性阴性阴性阳性阳性阳性阴性阴性阴性 这是我的代码:     // sa se scifice daca un vector contine elementele in ordinea: // pozitiv-negativ-pozitiv-pozitiv-negativ-negativ-pozitiv-pozitiv-pozitiv等 // Se va afisa DA sau NU。

#include <iostream>
using namespace std;

int main()
{
int i, j, k;
int n;
cout<<"Dati numarul de elemente: ";
cin>>n;
int v[n+1];
cout<<"Dati elementele vectorului: ";
for(i=1; i<=n; i++)
    cin>>v[i];

int stop = 1;
int aici = 2;
int pozitiv, negativ;
for(int i=1; i<=n; i=i+stop)
{
    for(int k=i; k<=aici/2; k++)
    {
        cout<<"v[k] = "<<v[k]<<endl;
        if(v[k]>0)
            pozitiv = 1;
        else
        { 
            pozitiv = 0;
            break;
        } 
    }
    for(int j=aici/2+1; j<=aici; j++)
    {
        cout<<"v[j] = "<<v[j]<<endl;
        if(v[j]<0)
            negativ = 1;
        else
        { 
            negativ = 0;
            break;
        }
    }
    if(pozitiv == 0 && negativ == 0)
        break;
    stop = 2*i;
    aici = aici + stop;
    cout<<stop<<" "<<aici<<endl;
}

if(pozitiv == 1 && negativ == 1)
    cout<<endl<<"DA!";
else cout<<endl<<"NU!";

cout<<endl;
return 0;

}

1 个答案:

答案 0 :(得分:1)

int sign(int v)
{
   return (v == 0) ? 0 : ((v > 0) ? 1 : -1);
}

int check(int v[], int n) // return 1 for true, 0 for false
{
   int sign = 1;
   int count = 1;
   int sc = 0;
   for (int i = 0; i < n; i++)
   {
      if (sign(v[i]) != sign)
         return 0;
      sc++;
      if (sc == count)
      {
         sc = 0;
         if (sign == 1)
            sign = -1;
         else
         {
            sign = 1;
            count++;
         }
      }
   }
   return 1;
}

int main()
{
   // ... put here your code for filling v

   cout << (check(v, n)) ? "DA!" : "NU!" << endl;
}

另外,你应该将v声明为int v [n],并将其从v [0]填充到v [n-1]。