1

我有一个多项式类,它提示用户输入要放入整数向量 ( vector<int> vect_poly) 的值。我正在尝试一种方法来检测用户在 while 循环中执行此类操作的情况下的多项式次数:

0↵0↵0↵0↵4↵0↵0↵0↵0 ← x^4(度数=4)

(或者)

0↵0↵0↵0↵0↵0↵0↵0↵0←(度数=0)

(或者)

4↵0↵0↵0↵0↵0↵0↵0↵0 ← x^0(度数=0)

(或者)

0↵0↵0↵0↵0↵0↵0↵0↵4 ← x^8(度数=8)

我真的只是在寻找一个巧妙的算法。


那这个呢:

 int degree()
 {
 int d = 0;
    for ( int i = 0; i < 100; i++ )
       if ( coef[i] != 0 ) d = i;
          return d;
 }
4

4 回答 4

0

为什么不只是跟踪它?

std::vector<int> polynomial;
int degree = 0;
int inputs = 0;
int coefficient;
while (std::cin >> coefficient)
{
    polynomial.push_back(coefficient);
    if (coefficient != 0)
    {
       degree = inputs;
    }
    inputs++;
}
于 2013-08-01T09:34:27.453 回答
0

我看到两个选项:

  1. 只需将输入复制到向量中,然后搜索最后一个非零值并在此之后截断向量。

  2. 将输入复制到临时向量中,每次输入非零时,将临时向量移动附加到vect_poly,如下所示:

    std::vector<int> temp;
    int n;
    while (std::cin >> n) {
      temp.push_back(n);
      if (n != 0) {
        vect_poly.insert(vect_poly.end(), temp.begin(), temp.end());
        temp.clear();
      }
    }
    

    这样,您将获得除vect_poly.

编辑

3. 您也可以将0s 保存在计数器中:

int n;
size_t zeroes = 0;
while (std::cin >> n) {
  if (n == 0) {
    ++zeroes;
  } else {
    vect_poly.insert(vect_poly.end(), zeroes, 0);
    vect_poly.push_back(n);
    zeroes = 0;
  }
}
于 2013-08-01T07:59:22.937 回答
0

如果你有这个向量,用户输入了系数的值,你可以从索引 0 遍历向量到最后一个元素(假设用户将以正确的顺序输入系数的值),并保存最后一个索引的值,其值不为零。

 int degreeOfPolynomial=0;
 for(int i=0 ; i < vect_poly.size() ; i++)
 {
   if(vect_poly[i] != 0)
   degreeOfPolynomial = i;
 } 

执行上述部分代码后,degreeOfPolynomial将存储多项式次数的正确值。

于 2013-08-01T08:09:51.587 回答
0

您可以使用局部变量来跟踪最大值,并且每次用户按下回车键时,您都会将他们的输入与当前最大值进行比较。

int max=0;
while(1)
{
    int input=0;
    std::cin>>input;
    if(input>max)
    {
        max=input;
    }
}

当然有一些突破条件,所以循环不会永远运行。您可以尝试在 if 语句中弄乱三元运算符,但我认为这没什么价值。

编辑:如果您想尽快知道先前生成但本质上是随机向量的最后设定值(即度数),请运行如下循环:

int max=0;
for(int k= myvec.size()-1; k>=0; k--)
{
    if(myvec[k]>0)
    {
         max=k;
         break;
    }
}
于 2013-08-01T07:33:16.043 回答