标题:今天去爱立信面试,面试官给我出的 C 算法问题。大家来看看!
只看楼主
胡胡熊
Rank: 1
等 级:新手上路
帖 子:23
专家分:5
注 册:2014-3-13
结帖率:77.78%
已结贴  问题点数:10 回复次数:18 
今天去爱立信面试,面试官给我出的 C 算法问题。大家来看看!
举例:对于一个2*2的二维数组,从[0,0]位置走到[1,1]位置有两种路线。(注:所有移动只能是向右‘→’方向或者向下‘↓’方向
      对于一个3*2的二维数组,从[0,0]位置走到[2,1]位置有三种路线。(大家可以自己画一画就知道了)
      对于一个3*3的二维数组,从[0,0]位置走到[2,2]位置有六种路线。
问题:对于一个m*n的二维数组,m和n不一定相等。从[0,0]位置走到[m-1,n-1]位置有多少种路线?
      编写函数 int f(m,n) 返回路线数。

给我十分钟的时间,我只想出一个算法出来,没写出真正的程序。并且算法比较简单,面试官说我的算法效率太低。

各位有没有什么高见,说一说这个算法怎么写好
搜索更多相关主题的帖子: 面试官 爱立信 
2014-04-15 23:19
C_lscll
Rank: 2
等 级:论坛游民
帖 子:22
专家分:18
注 册:2014-2-6
得分:1 
应该可以用递归的,可是我还没有学好递归,没有办法提高解决方案。
2014-04-15 23:57
C_lscll
Rank: 2
等 级:论坛游民
帖 子:22
专家分:18
注 册:2014-2-6
得分:0 
我认为C语言递归是最难学的。
2014-04-15 23:58
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
得分:1 
这不是广搜吗?还有规律----杨辉三角
0     1     1     1      1
1     2     3     4      5
1     3     6     10    15
1     4    10    20    35
1     5    15    35    70
你要的结果就是杨辉三角的坐标的值(1.1)2 (2.1)3 (2.2)6.....

仰望星空...........不忘初心!
2014-04-16 02:04
Susake
Rank: 15Rank: 15Rank: 15Rank: 15Rank: 15
来 自:女儿国的隔壁
等 级:贵宾
威 望:23
帖 子:2288
专家分:6481
注 册:2012-12-14
得分:0 
a[i][j]=a[i][j-1]+a[i-1][j]

[ 本帖最后由 Susake 于 2014-4-16 14:22 编辑 ]

仰望星空...........不忘初心!
2014-04-16 02:08
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:507
帖 子:8890
专家分:53117
注 册:2011-1-18
得分:1 
f(m,1) = 1
f(1,n) = 1
f(m,n) = f(m-1,n) + f(m,n-1)

当然了,你别用递归。

--------------------------------------------

Susake 已经回答你了,我没看完回帖就回答了,sorry


[ 本帖最后由 rjsp 于 2014-4-16 08:28 编辑 ]
2014-04-16 08:19
xixiqiqi
Rank: 2
等 级:论坛游民
帖 子:22
专家分:71
注 册:2013-10-10
得分:1 
程序代码:
#include <stdio.h>

int f(int m,int n)
{
    static sum=0;
    if(0==m-1&&0==n-1) sum++;
    if(m-1>0) f(m-1,n);
    if(n-1>0) f(m,n-1);
    return sum ;
}

int main()
{
    printf("3*3的数组共有路线: %d\n",f(3,3));
    return 0;
}

我看题目中f()有返回值,在函数中用了static,所以这个方法在测试时不能反复调用,修改测试数据才可以得到答案。
2014-04-16 08:50
xixiqiqi
Rank: 2
等 级:论坛游民
帖 子:22
专家分:71
注 册:2013-10-10
得分:0 
原来和杨辉三角还有关系,学习了。
2014-04-16 08:54
yuxiao2011
Rank: 1
等 级:新手上路
帖 子:1
专家分:1
注 册:2014-4-16
得分:1 
回复 7 楼 xixiqiqi
int main()
     {    int m,n;
          scanf("%d,%d",&m,&n);
          printf("%d*%d的数组共有路线: %d\n",m,n,f(m,n));
          return 0;
      }
测试数据。。。同学说的是什么意思?
是不是你的程序块中的main()改成这个样子就可以用了?
2014-04-16 09:37
klapset
Rank: 4
等 级:业余侠客
威 望:2
帖 子:71
专家分:234
注 册:2014-2-27
得分:1 
动态规划
2014-04-16 11:06



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-430158-1-1.html




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

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