/****
【题目】试写一算法,如果三个整数a,b和c的值
不是依次非递增的,则通过交换,令其为非递增。
*/
void Descend(int &a, int &b, int &c)
/* 通过交换,令 a >= b >= c */
{
int temp;
if(c>=b)
{
temp=b;
b=c;
c=temp;
}
if(b>=a)
{
temp=a;
a=b;
b=temp;
}
if(c>=b){
temp=b;
b=c;
c=temp;
}
}
/****
【题目】试编写算法求一元多项式
P(x) = a0 + a1x + a2x^2 + … + anx^n
的值P(x0),并确定算法中每一语句的执行次数和整个算法
的时间复杂度。
****/
float Polynomial(int n, int a[], float x)
/* 求一元多项式的值P(x)。 */
/* 数组a的元素a[i]为i次项的系数,i=0,...,n */
{
double px;
int i;
for(i=0;i<=n;i++)
px+=a[i]*pow(x,i);
return px;
}
/****
【题目】已知k阶裴波那契序列的定义为
f(0)=0, f(1)=0, …, f(k-2)=0, f(k-1)=1;
f(n)=f(n-1)+f(n-2)+…+f(n-k), n=k,k+1,…
试编写求k阶裴波那契序列的第m项值的函数算法,
k和m均以值调用的形式在函数参数表中出现。
****/
Status Fibonacci(int k, int m, int &f)
/* 求k阶斐波那契序列的第m项的值f */
{
int t[60],sum,i,j;
if(k<2||m<0)
return ERROR;
if(m<k-1)
f=0;
else if(m==k-1)
f=1;
else{
for(i=0;i<=k-2;i++){
t[i]=0;
t[k-1]=1;
for(i=k;i<=m;i++){
sum=0;
for(j=i-k;j<i;j++)
sum+=t[j];
t[i]=sum;
}
}
f=t[m];
}
return OK;
}