| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1940 人关注过本帖
标题:[分享]百度武大笔试题
只看楼主 加入收藏
無邪的睡脸
Rank: 2
等 级:等待验证会员
威 望:1
帖 子:344
专家分:13
注 册:2007-9-11
结帖率:100%
收藏
 问题点数:0 回复次数:12 
[分享]百度武大笔试题
程序设计一:设计一个函数int func(unsigned)实现:输入n,若n为偶数,则除以2,若为奇数,则可以作加1或减1操作。知道n变为1,函数返回操作的最少次数。
举例:n=7,7->8->4->2->1,最少次数为4。
我当时程序这样写的,回来调试了一下,通过了;
#include <stdio.h>
int main()
{
int func(unsigned);
int n;
printf("输入一个数:");
scanf("%d",&n);
printf("最少次数为%d\n",func(n));
return 0;
}
int func(unsigned n)
{
if(n==1)
return 0;
else
if(n%2==0)
return(func(n/2)+1);
else
return(func(n+1)<func(n-1)?func(n+1)+1:func(n-1)+1);
}
程序设计题二:
ip.txt中存放ip地址,一行包含一个ip,可能是一个ip地址(192.168.0.1),也可能是一个ip段(192.168.0.10 192.168.0.100)ip段的范围不超过一个B类,行数不超过10万,现有ip入侵,如果入侵ip在文件中则输出“Y”,否则输出“N”
我的程序如下,应该还有很多优化的地方,大家提哈意见;
#include <stdio.h>
int main()
{
FILE *fp;
int i,a[4],b[4],c[4];//c存放入侵地址,ab分别存放首尾地址
char d;
printf("入侵IP:");
scanf("%d.%d.%d.%d",&c[0],&c[1],&c[2],&c[3]);
while((fp=fopen("d:\\ip.txt","r"))==NULL)
{
printf("打开文件失败!\n");
exit(1);
}
while(!feof(fp))
{
for(i=0;i<4;i++)
{
fscanf(fp,"%d",&a[i]);
d=fgetc(fp);
}
if(d=='\n') //该行为ip地址
{
for(i=0;i<4;i++)
if(a[i]==c[i])
continue;
else
break;
if(i==4&&a[4]==c[4]) //匹配成功
{
printf("Y\n");
return 0;
}
}
else //该行为ip段
{
for(i=0;i<4;i++)
{
fscanf(fp,"%d",&b[i]);
d=fgetc(fp);
}
if(a[2]==b[2])
if(c[2]==a[2]&&c[3]>=a[3]&&c[3]<=b[3])
{
printf("Y\n");
return 0;
}
else
;
else
{
if(c[2]>a[2]&&c[2]<b[2])
{
printf("Y\n");
return 0;
}
if(c[2]==a[2]&&c[3]>=a[3]||c[2]==b[2]&&c[3]<=b[3])
{
printf("Y\n");
return 0;
}
}
}
}
fclose(fp);
printf("N\n");
return 0;
}
比较那里写的很乱,考试时写的。数据结构没学,算法考前抱了下佛脚,现在才开始学C一个月,就这水平了!

[此贴子已经被作者于2007-9-20 13:17:27编辑过]

搜索更多相关主题的帖子: 百度 笔试 int func 
2007-09-20 12:03
静思
Rank: 3Rank: 3
来 自:沈阳
等 级:新手上路
威 望:8
帖 子:630
专家分:0
注 册:2006-2-28
收藏
得分:0 
今天下午百度就要来我们学校了,哈哈!期待中..

英者自知,雄者自胜
2007-09-20 12:12
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
怎么不来我们学校`````


女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-09-20 12:13
ACKing
Rank: 1
等 级:新手上路
帖 子:69
专家分:0
注 册:2007-9-4
收藏
得分:0 

这么简单的笔试题?

2007-09-20 12:18
死了都要C
Rank: 4
来 自:四川成都
等 级:贵宾
威 望:13
帖 子:1582
专家分:116
注 册:2006-12-7
收藏
得分:0 
不知道有没有什么简单方法``能一步就把一个偶数``直接弄成奇数```

10000->5000->2500->1250->625``好麻烦啊```

要是可以直接把10000弄成625就好了```



女施主``我给你``送茶来了```师太``你就从了老衲吧``
代码本天成~~~妙头偶得之```
2007-09-20 12:22
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
以下是引用死了都要C在2007-9-20 12:22:33的发言:
不知道有没有什么简单方法``能一步就把一个偶数``直接弄成奇数```

10000->5000->2500->1250->625``好麻烦啊```

要是可以直接把10000弄成625就好了```

简单DP,比那个3n+1还要好做些



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.org/

2007-09-20 12:25
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
收藏
得分:0 
楼主代码没错,但时间复杂度太高了。。。
baidu考的题应该不会这样简单的算法就能解决。
这是我写的代码,但还没自习考虑,不确定有没有bug:

/**
@author: Eastsun
@version 1.0 2007/9/20
*/
#include<stdio.h>
int func(unsigned n){
int count =0;
while(n-1){
if(n&1){
if((n^3)&&!(n&3^3)) n++;
else n--;
}
else{
n >>=1;
}
count ++;
}
return count;
}
int main(){
unsigned n;
printf(\"Input a unsigned number:\");
scanf(\"%u\",&n);
printf(\"func(%u) =%d\",n,func(n));
}

[此贴子已经被作者于2007-9-20 12:52:03编辑过]


My BlogClick Me
2007-09-20 12:46
Eastsun
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:32
帖 子:802
专家分:0
注 册:2006-12-14
收藏
得分:0 
以下是引用雨中飞燕在2007-9-20 12:25:46的发言:

简单DP,比那个3n+1还要好做些

DP...
时间复杂度应该是O(n)吧?
如果把输入改成unsigned long long 就够呛了。。


My BlogClick Me
2007-09-20 12:59
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
收藏
得分:0 
不是O(logn)?



by 雨中飞燕 QQ:78803110 QQ讨论群:5305909

[url=http://bbs.bc-cn.net/viewthread.php?tid=163571]请大家不要用TC来学习C语言,点击此处查看原因[/url]
[url=http://bbs.bc-cn.net/viewthread.php?tid=162918]C++编写的Windows界面游戏[/url]
[url=http://yzfy.org/]C/C++算法习题(OnlineJudge):[/url] http://yzfy.org/
2007-09-20 13:07
無邪的睡脸
Rank: 2
等 级:等待验证会员
威 望:1
帖 子:344
专家分:13
注 册:2007-9-11
收藏
得分:0 
才学了一个月的C,没考虑那么多。算法大三上学的,全忘了!以前没认真学,现在后悔莫及啊!
2007-09-20 13:15
快速回复:[分享]百度武大笔试题
数据加载中...
 
   



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

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