生成随机的多项式

以下程序能生成形如 (0,0) + (15.7,3) + (141.3,4) + (185.26,5) + (97.34,7) + (106.76,8)  的随机多项式,其中(0, 0) 是固定的项,表示多项式的开始,对运算结果不产生影响.括号中的第一项表示底数,第二项表示指数,如: (a,b) 表示 a  的 b 次方.

#include<iostream.h>
#include<stdlib.h>
#include<time.h>

typedef struct PNode
{
	double coef;//系数
	int exp;//指数
	struct PNode *next;//指向下一结点的指针
}PNode,*Polynomial;

int static flag=0;

int CreatePoly(Polynomial &head)
{
	int k,i;
	head=new PNode;
	head->next=NULL;head->coef=0;head->exp=0;//头结点系数和指数都为0
	Polynomial p,pre,lp;
	if(flag == 0)
	{
		srand((unsigned)time(NULL));flag=1;
	}
	k=rand()%12;
	for(i=0;i<3+k;i++)
	{
		p=new PNode;//生成新结点
		p->coef=(rand()%100)*3.14;
		p->exp=rand()%9;
		if(head->next == NULL)//生成第一个结点时直接链入表头
		{
			head->next=p;p->next=NULL;
		}
		else//生成后续结点并按指数从小到大的顺序插入链表
		{
			pre=head;lp=pre->next;
			while(lp != NULL && lp->exp < p->exp)//寻找插入位置
			{
				pre=lp;lp=lp->next;
			}
			//若表中已有指数相同的项,则不插入,直接进行下一次循环
			if((lp != NULL && p->exp == lp->exp) || pre->exp == p->exp || p->coef == 0)continue;
			if(lp != NULL)
			{
				p->next=pre->next;pre->next=p;
			}
			else
			{
				pre->next=p;p->next=NULL;
			}
		}
	}
	return 1;
}
int DisplayPoly(Polynomial head)//输出多项式的各个项
{
	Polynomial p=head;
	while(p->next !=NULL)
	{
		cout<<"("<<p->coef<<","<<p->exp<<")"<<" + ";		p=p->next;
	}
	cout<<"("<<p->coef<<","<<p->exp<<")"<<endl<<endl;
	return 1;
}
int main()
{
	Polynomial headla,headlb;
	CreatePoly(headla);//生成多项式
	CreatePoly(headlb);//生成多项式
	DisplayPoly(headla);//输出多项式
	DisplayPoly(headlb);//输出多项式
	return 1;
}


 

 

你可能感兴趣的:(算法,生成,随机,多项式)