免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: 无风之谷
打印 上一主题 下一主题

这样的面试题,你会吗?(有奖) [复制链接]

论坛徽章:
10
CU大牛徽章
日期:2013-09-18 15:20:48程序设计版块每日发帖之星
日期:2016-07-21 06:20:00IT运维版块每日发帖之星
日期:2015-07-30 09:40:01技术图书徽章
日期:2014-10-14 16:00:43天蝎座
日期:2013-09-27 17:41:29CU大牛徽章
日期:2013-09-18 15:21:17CU大牛徽章
日期:2013-09-18 15:21:12CU大牛徽章
日期:2013-09-18 15:21:06CU大牛徽章
日期:2013-09-18 15:20:58每日论坛发贴之星
日期:2016-07-21 06:20:00
31 [报告]
发表于 2011-12-05 11:59 |只看该作者
我来晚了

论坛徽章:
0
32 [报告]
发表于 2011-12-05 14:59 |只看该作者
学习了,,真是强大

论坛徽章:
3
2015年迎新春徽章
日期:2015-03-04 09:56:11数据库技术版块每日发帖之星
日期:2016-08-03 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
33 [报告]
发表于 2011-12-05 16:52 |只看该作者
22L应该是最优的
那些分块四分的如何处理左下与右上的大小关系?
hbmhalley 发表于 2011-12-03 19:25



    通用情况下来说,这种做法是最次的

论坛徽章:
0
34 [报告]
发表于 2011-12-05 17:52 |只看该作者
程序员求职找工作,谁也逃不掉做编程面试题,这样的面试题,你做过吗?
1,二维数组中的查找
在一个二维 ...
无风之谷 发表于 2011-11-30 11:52


我用的perl,下面是代码。
1.数组中查找:
  1. $r_array = [[1, 2, 8, 9], [2, 4, 9, 12], [4, 7, 10, 13], [6, 8, 11, 15]];
  2. $goal = 14;
  3. foreach $i (0..$#{$r_array}) {
  4.     foreach $j (0..$#{$r_array->[0]}) {
  5.         if ($r_array->[$i]->[$j] == $goal ) {
  6.             print "true\n";
  7.             exit 0;
  8.         }
  9.     }
  10. }
  11. print "false\n";
复制代码
2(1).青蛙跳:
  1. $goal = 5;
  2. $step = 2;
  3. if ( ($goal < 1) or ($step < 1) ) {
  4.     print "ERROR\n";
  5.     exit -1;
  6. }
  7. $former0 = 1;
  8. $former1 = 1;
  9. $way = 0;
  10. for (2..$goal) {
  11.     $way = $former0 + $former1;
  12.     $former0 = $former1;
  13.     $former1 = $way;
  14. }
  15. print "way:$way\n";
复制代码
2(2).n个台阶,1..n都可以跳时,跳的方法就是2的n次方种。
记跳上第n个台阶的方法数是$way_n,跳上第n-1个台阶的方法是$way_n_1,则$way_n = $way_n_1 + $way_n_2 + … + $way_1 + 1;
最后一个1是从地上直接跳了n个台阶。
$way_1 = 1;
$way_2 = 2;
$way_3 = 4;
...
$way_n = 1 + 2^1 + 2^2 + 2^3 + ... + 2^(n-1) = 2^n;

论坛徽章:
0
35 [报告]
发表于 2011-12-05 18:03 |只看该作者
在算法里面也就算1+1=2的问题!

1, 折半查找 效率O(log(n)+log(m))

2, 第一问简单递推 t[n] = t[n-1] + t[n-2]
      第二问最特么简单的DP

不贴代码,因为我不想要书,,,呵呵, 表告诉我书里面内容就这水平,,,

论坛徽章:
0
36 [报告]
发表于 2011-12-05 20:56 |只看该作者
本帖最后由 zhoucosin 于 2011-12-05 20:57 编辑

青蛙问题第一个


论坛徽章:
0
37 [报告]
发表于 2011-12-05 21:17 |只看该作者
/*思路:
1、先看第一个数是否小于num(所查找的数)最后一个是否小于num,是则输出false,否则判断是否相等,相等则输出true,否则下一步
2、从第一行找第一个大于num所在的列j,如果有等于的则退出且输出true,否则下一步
3、从j=j-1列的i行到n-1行找=num的数所在的行i,若有则输入true,否则重复3;
*/

#include<stdio.h>

#define maxsize 100


int main(void)
{
        int n,i,j;
        int a[maxsize][maxsize];
        int num;
        int low,high;
        i=0,j=0;
        printf("n=");
        scanf("%d",&n);
        printf("a[%d][%d]=\n",n,n);
        for(i=0;i<n;i++)
                for(j=0;j<n;j++)
                scanf("%d",&a[i][j]);
        printf("num=");
        scanf("%d",&num);
        if(num<a[0][0]||num>a[n-1][n-1])
        {
                printf("false!\n");
                return 0;
        }
        if(num==a[0][0]||num==a[n-1][n-1])
        {
                printf("true!\n");
                return 0;
        }
       
        for(i=0,j=1;j<n;j++)
        {
                if(a[i][j]==num)
                {
                        printf("true!\n");
                        return 0;
                }
                if(a[i][j]>num)
                        break;
               
        }
        i=1;
        for(j=j-1;j>=0;j--)
        {       
                if(j<0||i>n-1)
                {
                        printf("false!\n");
                        return 0;
                }
                for(;i<n;i++)
                {
                        if(num==a[i][j])
                        {
                                printf("true!\n");
                                return 0;
                        }
                        if(num<a[i][j])
                                break;
                }
        }
        printf("false!\n");
        return 0;
       
}

论坛徽章:
0
38 [报告]
发表于 2011-12-05 21:18 |只看该作者
补充,查找时我用的是顺序查找,当然我用二分法效率肯定是会高点的.

论坛徽章:
0
39 [报告]
发表于 2011-12-05 21:27 |只看该作者
青蛙问题:
1、
f(n)=f(n-1)+f(n-2)
f(0)=2;
2、
f(n)=f(n-1)+f(n-2)+.....+f(0);
f(0)=n;

都是用递归解决的.

没有抄袭楼上的意思,我是想过之后再看楼上的回答的。

论坛徽章:
0
40 [报告]
发表于 2011-12-05 21:33 |只看该作者
呵呵…… 不好意思,那个思路写的太……

改为
/*思路:
1、先看第一个数是否小于num(所查找的数)最后一个是否大于num,是则输出false,否则判断是否相等,相等则输出true,否则下一步
2、从第一行找第一个大于num或等于所在的列j,if等于则退出且输出true,否则下一步
3、从j=j-1列的i行到n-1行找=num或者第一个大于num的数所在的行i,若==num则输出true且退出程序,否则重复3;
*/
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP