| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3307 人关注过本帖
标题:[讨论]挑战!今天一家牛公司给的c语言面试题!!(限时一下午)
只看楼主 加入收藏
philo
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-4-24
收藏
 问题点数:0 回复次数:30 
[讨论]挑战!今天一家牛公司给的c语言面试题!!(限时一下午)
只写函数,不能调用任何系统函数,函数名自取
1。实现行程压缩,将重复的数据用重复次数来表达,例如:aaabbbccc->a3b3c3,abcd->abcd,aabcdd->a2bcd2,在代码实现过程中要考虑解压。(看起来简单,实际写出来问题多得是了!)

2。将1个8位二进制数转换成十六进制数,将两位十六进制数转换成二进制数输出;

3。有一个程序,包括三部分,有三个人配合开发。
第一个是中断的服务程序,其涉及复杂的地层硬件驱动,每次能够从硬件得到一个字节的信息;
第二部分是主程序,其也非常复杂,主程序的运作命令来自中断服务程序,每次获取一个字节;
第三部分是你要写得程序,用于衔接主程序何种断服务程序,其含三个子程序:
A。资源初始化程序:他有主程序在启动时调用,完成你所使用得资源的初始化;
B。数据暂存子程序:它供中断程序调用,用于处理聪硬件获取的数据;
C。数据获取子程序:它供主程序调用,以便主程序能够获取来自硬件的数据;
注意:为简化端口,三部分所有的程序将简单放在一个文件中进行编译。

各位大侠给些意见和代码来交流一下!

[此贴子已经被作者于2007-4-25 14:21:19编辑过]

搜索更多相关主题的帖子: c语言 牛公司 二进制数 主程序 abcd 
2007-04-24 20:21
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
1.

void Press(char *str)
{
int count=1;
int i=0,j=0,k=0,m=0;
char data[100];
int b[10];
while(str[i]!='\0')
{
count=1;
j=i+1;
while(str[j]!='\0'&&str[i]==str[j])
{
j++;
count++;
}
data[k++]=str[i];
m=0;
while(count) //将个数转换为字符
{
b[m++]=count%10;
count/=10;
}
while(m--)
{
data[k++]=b[m]+'0';
}
i=j;
}
data[k]='\0';
printf("\n%s\n%s\n",str,data);
}

感觉空间浪费的太大了,本来想直接移来着,不过想想时间效率不高,也很麻烦.所以就将就一下了.

倚天照海花无数,流水高山心自知。
2007-04-24 23:34
philo
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-4-24
收藏
得分:0 

假设aabbcd->a2b2cd,我要是字符串就是a2b2cd,压缩后是a2b2cd,那么解压缩要变成什么啊?

2007-04-25 10:47
philo
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-4-24
收藏
得分:0 
晕,这个叫压缩吗??abcd被扩展成a1b1c1d1了!
数字转换成字符跟在后面是一种极端错误的表现方式,算法很简单,就是找不到一个合适的表现方式。
2007-04-25 10:57
feelings010
Rank: 1
等 级:新手上路
帖 子:63
专家分:0
注 册:2007-4-20
收藏
得分:0 
完全看不明白!
2007-04-25 11:42
crackerwang
Rank: 3Rank: 3
等 级:新手上路
威 望:8
帖 子:833
专家分:0
注 册:2007-2-14
收藏
得分:0 
最后一个不会

2007-04-25 11:45
ml342418175
Rank: 1
等 级:新手上路
威 望:1
帖 子:183
专家分:0
注 册:2007-4-13
收藏
得分:0 

够牛的


做人要洒脱一点,潇洒一点!
2007-04-25 12:31
福尔摩斯
Rank: 5Rank: 5
等 级:贵宾
威 望:12
帖 子:4011
专家分:370
注 册:2006-8-15
收藏
得分:0 
以下是引用nuciewth在2007-4-24 23:34:09的发言:
1.

void Press(char *str)
{
int count=1;
int i=0,j=0,k=0,m=0;
char data[100];
int b[10];
while(str[i]!='\0')
{
count=1;
j=i+1;
while(str[j]!='\0'&&str[i]==str[j])
{
j++;
count++;
}
data[k++]=str[i];
m=0;
while(count) //将个数转换为字符
{
b[m++]=count%10;
count/=10;
}
while(m--)
{
data[k++]=b[m]+'0';
}
i=j;
}
data[k]='\0';
printf("\n%s\n%s\n",str,data);
}

感觉空间浪费的太大了,本来想直接移来着,不过想想时间效率不高,也很麻烦.所以就将就一下了.

我觉得指针数组会比较快点


自我放逐。。。
2007-04-25 12:37
philo
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2007-4-24
收藏
得分:0 

第二题各位高手有没有代码效率最高的???

2007-04-25 14:22
luyihuaa5201
Rank: 2
等 级:论坛游民
帖 子:254
专家分:10
注 册:2007-3-25
收藏
得分:0 
都不时蛮会  
2007-04-25 22:07
快速回复:[讨论]挑战!今天一家牛公司给的c语言面试题!!(限时一下午)
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.061704 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved