返回信息流没编完,不过编到现在输入了几个数测试了一下发现很无厘头:
我将一组数字按不同顺序输入得出的和却是两种结果,实在是百思不的其解,所以来请教各位!谢谢了
#include<iostream.h>
#include<iostream.h>
struct element // 用来存原始放字符串的单链表的结点类型
{ element *next;
double weight; // 存放权值
char letter; //存放字符
};
class HuffmanTree //定义一个哈夫曼树类
{ public:
HuffmanTree()
{
cout<<"请输入你的字符个数:"<<endl;
first=new element;first->next=NULL; //存放字符串的单链表初始化为空表
GetLetter(); //接受输入的字母
//cout<<"shuru jieshu"<<endl;
cout<<endl<<endl;
//WrongLetter(); //删除重复的字符
cout<<"输入字符对应的概率:"<<endl;
GetP();
};
~HuffmanTree()
{ // cout<<"调用析构函数"<<endl;
while(first)
{ element *q=first; //调用析构函数销毁单链表
first=first->next;
delete q;
}
// cout<<"析构结束"<<endl;
};
void GetLetter() //收集输入的字符串
{ int num;
cin>>num; //num表示输入字符串的字符个数
char ch;
element *p=first;
cout<<"输入符号:"<<endl;
while(num)
{
cin>>ch;
element *s=new element; //申请内存存放字符
s->letter=ch; //用头插法将字符串存进单链表
s->next=p->next;
p->next=s;
//s->weight=1;
p=p->next;
num--;
}
};
void GetP() //得到每个符号的概率
{ element *p=first->next;
double sum=0;
while(p)
{
cin>>p->weight;
sum+=p->weight;//cout<<endl<<"sum为:"<<sum<<endl;
p=p->next;
}
if(sum!=1)
{
cout<<endl<<"概率和不为1,请重新输入:"<<endl;
GetP();
}
else
cout<<"概率和为1"<<endl;
};
private:
element *first;
};
void main()
{
HuffmanTree a;
}
运行的结果,明明都是1,却得出来有的不是1
这是一条镜像帖。来源:北邮人论坛 / cpp / #17978同步于 2008/12/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
编哈弗曼的时候遇到一个囧事!!!——无法解决,请教各位!
youbupt
2008/12/22镜像同步9 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 guo 的大作中提到: 】
: GetP()中的if(sum!=1)
: 改成if ((sum - 1.0 > 0.000001) || (sum - 1.0 < -0.000001))
: 试试
厉害,谢谢了 啊
你得到它了
【 在 ericyosho (ericyosho) 的大作中提到: 】
: 祭祖?机组?
: 莫非是计算机组成原理?
: =.=
: ...................