我有一个多项式类,提示用户输入要放入整数向量的值(vector<int> vect_poly
)。我试图想办法检测多项式的程度,以便用户在while循环中执行类似的操作:
0↵0↵0↵0↵4↵0↵0↵0↵0←x ^ 4(度= 4)
(OR)
0↵0↵0↵0↵0↵0↵0↵0↵0←(度= 0)
(OR)
4↵0↵0↵0↵0↵0↵0↵0↵0←x ^ 0(度= 0)
(OR)
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;
}
答案 0 :(得分:0)
您可以使用局部变量来跟踪最大值,每次用户按Enter键时,您将其输入与当前最大值进行比较。
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;
}
}
答案 1 :(得分:0)
我看到两个选项:
只需将输入复制到矢量中,然后搜索最后一个非零并在此之后截断矢量。
将输入复制到临时向量中,每次输入非零值时,将临时向量移动附加到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。您还可以将0
保留在计数器中:
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;
}
}
答案 2 :(得分:0)
如果你有这个向量,其中用户输入了系数的值,你可以遍历从索引0到最后一个元素的向量(假设用户将以正确的顺序输入系数的值),并且只保存最后的值其值不为零的索引。
int degreeOfPolynomial=0;
for(int i=0 ; i < vect_poly.size() ; i++)
{
if(vect_poly[i] != 0)
degreeOfPolynomial = i;
}
执行上面部分代码后, degreeOfPolynomial 将存储多项式次数的正确值。
答案 3 :(得分: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++;
}