[讨论]某软件公司的面试题一

今天下完课,朋友发我一个他去某软件公司的面试题。 趁着吃饭的时间就把题目做了一遍

 

题目如下:

-------------------------------------------------------------------------------------------

应聘考试题目

 

第一题:

   设计一个多线程环境下的链表操作,对链表进行创建、插入、删除、查询操作。(C语言实现)

 

第二题:

任意输入一字符串,在这个字符串中找出第一个只出现一次的字符。如输入abaccdeff,则输出b。

 

第三题:

利用哈夫曼算法对任意输入的字符串中各个字符进行编码,如输入aaarradgrt, 则输出:a,r,d,g,t的哈夫曼码值。

 

第四题:

利用递归方法求n!。

 

第五题:

现有一幅图片大小为320×240 ,每个像素24bit,图片的像素排布顺序是从上到下从左到右的,请设计一个算法把该图片变成240×320。

-------------------------------------------------------------------------------------------------------------------

把题目看了一遍, 第一题多线程 ,我没有接触过, 然后看第二题  第二题难度不大,然后直接看第三题 , 咦!第三题和第二题有很大的关联!!

于是我就直接奔向第三题:

利用哈夫曼算法对任意输入的字符串中各个字符进行编码,如输入aaarradgrt, 则输出:a,r,d,g,t的哈夫曼码值。

正好学过哈夫曼树的算法; 一阵编译调试  捣鼓出来了,而且输入 aaarradgrt, 正好也等于 a,r,d,g,t  感觉似对非对

 

 

代码

#include
<iostream>
#include
<string>
using namespace std;

const int n=5;
const int m=2*n-1;

class tree
{
public:
void CreateHftree();
public:
char data; //数据域
int count; //统计统一字符出现的次数
int parent; //父节点
int lch,rch; //左右孩子
};

tree hftree[m
+1];

void tree::CreateHftree()
{
int i , j ,k=0, p1 , p2;
int s1, s2;
string str;
bool count = false;
int va;

for(i=1; i<=m; i++) //初始化hftree
{
hftree[i].parent
=0;
hftree[i].lch
=0;
hftree[i].rch
=0;
hftree[i].data
=0;
hftree[i].count
=0;
}

cout
<<"Please Enter vale:";
cin
>>str;

/*———————————————————————— //处理字符 */

for(i=0; i<str.length(); i++)
{
va
=1; //va必须初始为1

for(int j=i+1; j<str.length(); j++)
{

if(str[i]==str[j])
{
str[j]
='*';
va
++;

}
}

if(str[i]!='*')
{
hftree[k].data
=str[i];
hftree[k].count
=va;
k
++;

}

}

/*———————————————————————— //开始编码 */
for(i=n+1 ; i<=m; i++)
{
p1
=p2=0;
s1
=s2=32767;

for(j=1; j<=i-1; j++)
if(hftree[j].parent==0)
if(hftree[j].count<s1)
{
s2
=s1;
s1
=hftree[j].count;
p2
=p1;
p1
=j;
}
else
if(hftree[j].count<s2)
{
s2
=hftree[j].count;
p2
=j;
}
hftree[p1].parent
=i;
hftree[p2].parent
=i;
hftree[i].lch
=p1;
hftree[i].rch
=p2;
hftree[i].count
=hftree[p1].count+hftree[p2].count;
}

/*———————————————————————— //开始编码 */
for(i=0; i<=m; i++)
{
if(hftree[i].data!=0)
{

cout
<<" number:"<<i<<" parent: "<<hftree[i].parent<<" left child: "<<hftree[i].lch<<" right child:"<<hftree[i].rch<<endl;

cout
<<" Data value: [ "<<hftree[i].data<<" ] Repeat :"<<hftree[i].count<<endl;
}

}

}



void main()
{
tree t;
t.CreateHftree();
}

 

 

为什么说他似对非对呢?

因为我把中间 哈夫曼编码这段注释结果也正好成立, 然而我也不知道这一题做的对不对。 还望众通道们帮我验证下

posted @ 2009-12-28 21:52  Fervour  阅读(859)  评论(3编辑  收藏  举报