一个腾讯笔试题

时间:2022-07-13 03:49:06 笔试 我要投稿
  • 相关推荐

一个腾讯笔试题

采用C编程,代码如下:

一个腾讯笔试题

#include

#define MAX 500

struct STACK

{

int m;

int n;

};

struct STACK S[MAX];

int akm1(int m, int n);

int akm(int m, int n);

void main()

{

int m,n;

int a,b;

printf("please input two data (m,n)\n");

scanf("%d,%d",&m,&n);

a=akm (m,n);

b=akm1(m,n);

printf("\n recursion=%d non-recursion=%d\n",a,b);

}

// 递归的模拟

int akm(int m, int n)

{

if(m*n==0)

return m+n+1 ;

else

{

return akm(m-1, akm(m,n-1));

}

}//akm

//非递归算法: int akm1(int m, int n)

{

int top =0;

S[top].m=m; /*S[MAX]为附设栈,top为栈顶指针*/

S[top].n=n;

if (m*n==0) //m+n+1;

return m+n+1;

do //f(m-1,f(m,n-1)) S[i] save m and n-1; 递归的模拟

{

while (S[top].m) //m-->0

{

S[top].n=S[top].n-1;

while(S[top].n) //n-->0

{

top++;

S[top].m=S[top-1].m ;

S[top].n=S[top-1].n-1;

}

S[top].m--; //when n=0, m=m-1.

S[top].n=S[top].m+2; // n=m+2

}

if(top>0) // m=0,f(m,n)

{

top--;

S[top].m--;

S[top].n=S[top+1].n+1;

}

}

while(top!=0||S[top].m!=0);

return S[top].n+1; //m*n!=0;

}//akm1

待解决问题,当m逐渐增大时,栈很快便会溢出,得不出结果。只有当m值较小时,才能计算出结果。

下面是模拟腾讯给出的样式 改进的程序:

int akm2(int m, int n)

{

int top ,f;

int ST[MAX]={0}; /*S[MAX]为附设栈,top为栈顶指针*/

top=0;

if (m*n==0)

return m+n+1;

do //f(m-1,f(m,n-1)) S[i] save m ; 模拟递归

{

if (m*n!=0)//当m*n!=0时,进行压栈处理

{

ST[top++]=m;

n--;

}

else //m*n=0

{

f=m+n+1;

if (top>0)

{

ST[top]=ST[--top]-1; //出栈操作

}

m=ST[top];//修改m,n的值

n=f;

}

}

while(top!=0||ST[top]!=0);

return f+1; //m*n!=0; 返回值

}


【一个腾讯笔试题】相关文章:

tencent腾讯 笔试题07-10

关于腾讯笔试题07-10

关于腾讯技术类笔试题07-10

一道腾讯的面试题07-09

跪求腾讯前端面试题07-10

腾讯实习生笔试题 网页重构07-10

华为笔试题硬件笔经07-11

腾讯技术类校园招聘笔试试题(A8卷)07-12

软件工程师笔试题目11-腾讯07-10

社团需办一个活动,需腾讯的赞助,该怎样联系腾讯公司?07-09