[讨论]某软件公司的面试题一
今天下完课,朋友发我一个他去某软件公司的面试题。 趁着吃饭的时间就把题目做了一遍
题目如下:
-------------------------------------------------------------------------------------------
应聘考试题目
第一题:
设计一个多线程环境下的链表操作,对链表进行创建、插入、删除、查询操作。(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();
}
为什么说他似对非对呢?
因为我把中间 哈夫曼编码这段注释结果也正好成立, 然而我也不知道这一题做的对不对。 还望众通道们帮我验证下
出处:http://fervour.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。