免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
121 [报告]
发表于 2011-12-14 10:57 |只看该作者
回复 35# zhoucosin


    数学功底扎实。赞

论坛徽章:
0
122 [报告]
发表于 2011-12-14 11:13 |只看该作者
回复 39# ahutwgs


    感谢参与本次活动。

    第一题采用顺序遍历的方式,效率有待提高。第二题第一问的递推公式是对的,但f(0)需要重新分析;第二问的递推公式有瑕疵。

论坛徽章:
0
123 [报告]
发表于 2011-12-14 11:20 |只看该作者
本帖最后由 hbmhalley 于 2011-12-14 11:35 编辑

回复 117# zhedahht

  1. //#define DATA

  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <assert.h>

  5. int main () {
  6.         int i , j;

  7. #define mat(x,y) _mat[(x)*col+(y)]

  8. #ifdef DATA
  9.         int row = 4 , col = 4;
  10.         int _mat[] = {
  11.                 1, 2, 8, 9,
  12.                 2, 4, 9, 12,
  13.                 4, 7, 10, 13,
  14.                 6, 8, 11, 15
  15.         };
  16. #else
  17.         printf ("Input the row and col\n");
  18.         int row , col;
  19.         assert (scanf ("%d%d" , &row , &col) == 2);
  20.         assert (row>0 && col>0);
  21.         int *_mat = (int*)calloc(row*col , sizeof(int));
  22.         printf ("Input the %d*%d matrix\n" , row , col);
  23.         for (i=0 ; i<row ; ++i)
  24.                 for (j=0 ; j<col ; ++j)
  25.                         assert (scanf ("%d" , &mat(i,j)) == 1);
  26. #endif

  27.         for (i = 0 ; i<row ; ++i)
  28.                 for (j = 0 ; j<col ; ++j) {
  29.                         assert (i==0 || mat(i,j) >= mat(i-1,j));
  30.                         assert (j==0 || mat(i,j) >= mat(i,j-1));
  31.                 }


  32.         int query;

  33.         while ( printf ("Input the number to find, or 'q' to quit\n"), scanf ("%d" , &query) == 1 ) {
  34.                 i = row-1; j = 0;
  35.                 while ( i>=0 && j<col && mat(i,j)!=query )
  36.                         mat(i,j)<query ? ++j : --i;

  37.                 if ( i>=0 && j<col )
  38.                         printf ("Existent : (%d,%d)\n" , i , j);
  39.                 else
  40.                         printf ("Inexistent\n");
  41.         }
  42. }
复制代码
22L的。代码很重要么

论坛徽章:
0
124 [报告]
发表于 2011-12-14 13:40 |只看该作者
回复 45# tjpulord


    思路可行,可惜木有代码

论坛徽章:
0
125 [报告]
发表于 2011-12-14 14:42 |只看该作者
回复 65# to407


    第一题的解答尽管做了不少优化,但本质上还是一个顺序查找。第二题的思路很赞,直接实现f(m,n)。不过您的实现是基于递归。这个问题如果用递归实现,会有大量的重复子问题,导致效率是个大问题。不妨试着求一下F(2, 40),也就是fibonacci数列的第40项,感受一下效率问题。

论坛徽章:
0
126 [报告]
发表于 2011-12-14 14:53 |只看该作者
回复 69# to407


    本质仍然是顺序遍历。基于递归的实现效率会有问题。前面已经讨论过递归的效率问题,不在重复了。

论坛徽章:
2
午马
日期:2015-01-27 11:22:392015年辞旧岁徽章
日期:2015-03-03 16:54:15
127 [报告]
发表于 2011-12-14 15:20 |只看该作者
回复 125# zhedahht


    thanks~~
   我只是考虑了递归,没有更进一步,这样效率上还是有很大差距

论坛徽章:
0
128 [报告]
发表于 2011-12-14 15:46 |只看该作者
回复 75# jonas_mao


     第一题的思路本质上顺序遍历。递归代码的实现和第69楼类似,查找的方向不一样。还有更优化的算法。

      第二题第一问的思路基本可行,但递归实现不是推荐的方法,效率不好。第二问还需要再推导,因为有更简洁的表达式。

论坛徽章:
0
129 [报告]
发表于 2011-12-14 16:13 |只看该作者
回复 87# 冰水1101


    思路基本可行。不过转换成代码的话,代码估计会比较复杂

论坛徽章:
0
130 [报告]
发表于 2011-12-14 16:22 |只看该作者
回复 93# herer


    谢谢关注本次活动。题目没有规定语言,Perl亦可。我没太多Perl经验。仔细拜您的代码对我而言也是学习的过程 第一题的解法本质上是在顺序查找的基础上做了些优化。第二题用递归实现组合。递归在这里会有比较严重的效率问题。不妨分析题目中的规律,找出更简洁的递推公式之后再写代码,可能容易一些。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP