CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  .NET技术 >  C#

想挑战自己吗?进来吧!“基础”啊

楼主mark44404(杨雪)2005-12-30 14:17:49 在 .NET技术 / C# 提问

private   int   Acckermann(int   x,int   y)  
  {  
          if(y==0)  
                return   y;  
          if(x==0)  
                return   y=2*y;  
          if(y==1)  
                return   y=2;  
          else  
                Acckermann(x-1,(Acckermann(x,y-1)));  
  }  
  求下面表达式的值:  
          Acckermann(1,10)  
          Acckermann(2,4)  
          Acckermann(3,3)  
  请各位给出下面函数的数学定义或解释:  
          private   void   f(int   n){Acckermann(0,n)}  
   
          private   void   g(int   n){Acckermann(1,n)}  
   
          private   void   h(int   n){Acckermann(2,n)}  
  例如private   void   k(int   n){5*n}计算的是5n。  
   
  凡最先给出正确的答案的前3位,可平分该分值,第一位可另得80分。  
  问题点数:120、回复次数:39Top

1 楼wengnet(西门吹雪)回复于 2005-12-30 14:21:43 得分 1

递归问题~!Top

2 楼shrinerain(圣影雨)回复于 2005-12-30 14:59:46 得分 10

 
   
   
                        0             (y=0)  
                        2y           (x=0,y!=0)  
  F(x,y)=         2             (x!=0,y=1)  
                        F(x-1,F(x,y-1))   (x!=0,y!=1)  
  Top

3 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-12-30 15:13:37 得分 0

函数写得有问题  
  如果x=100,y=100...........Top

4 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-12-30 15:17:18 得分 0

另外  
  else  
                Acckermann(x-1,(Acckermann(x,y-1)));  
   
  缺一个return  
   
   
  else  
                return   Acckermann(x-1,(Acckermann(x,y-1)));  
  Top

5 楼mark44404(杨雪)回复于 2005-12-30 15:32:12 得分 0

函数写得有问题  
  如果x=100,y=100...........  
   
  问题何在?  
   
  return的问题谢谢了。但重点不在那Top

6 楼abandonship(焚酒煮剑)回复于 2005-12-30 15:34:28 得分 0

……Top

7 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-12-30 15:42:35 得分 10

你测试一下就知道了  
  这个是你写的?还是面试题?  
  int得最大值是多少?  
  如果你自己知道这个函数是什么意思  
  你就会知道随便传两个数进去都会报错  
  比如2,5  
  这样的函数一般都必须用高精度算法  
  Top

8 楼mark44404(杨雪)回复于 2005-12-30 15:59:41 得分 0

上面题目中已经写了这叫Acckermann函数。  
  没有最大值。  
  Top

9 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-12-30 16:05:15 得分 10

private   void   f(int   n){Acckermann(0,n)}         2n         大于int得最大值报错  
   
  private   void   g(int   n){Acckermann(1,n)}         2得n次方(n>0)n为0时是0     n小于0会报错   大于int得最大值报错  
   
  private   void   h(int   n){Acckermann(2,n)}         n为0时是0     n小于0会报错   n大于4报错     2得Acckermann(2,n-1)得数的次方   本意好像是这个  
   
  不知道对不对  
   
  Top

10 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-12-30 16:11:34 得分 5

才注意到  
  原来是阿克曼函数  
  应该是Ackermann  
  多了个c没看清楚  
   
  Top

11 楼zeusvenus()回复于 2005-12-30 16:11:49 得分 0

又一个竞赛,不错!已置顶,希望兄弟们以后提出更有深度和难度的问题.Top

12 楼lovefootball(蟑螂(生活就是扯淡--做人要放低姿态))回复于 2005-12-30 16:13:49 得分 0

唉  
  当初离散学得不好  
  Top

13 楼epaib(放下)回复于 2005-12-30 16:15:55 得分 0

我想问楼主这是什么问题????想知道结果就到程序执行一下还不可以吗???  
   
  不知道这个递归调用有什么意义??Top

14 楼epaib(放下)回复于 2005-12-30 16:23:30 得分 0

晕了.....知道了...Top

15 楼terry52(天天在线)回复于 2005-12-30 16:37:10 得分 40

Acckermann(1,10)=1024  
  Acckermann(2,4)=65536  
  Acckermann(3,3)=65536  
   
  我将它转为数学来做。  
  a(n,0)=0;  
  a(0,n)=2n;  
  a(n,1)=2;  
   
  a(0,n)=2n;  
  a(1,n)=2^n;  
  a(2,n)=2^a(2,n-1);等到n-1=1时结束。像a(2,4)=2^2^2^2,从右往左运算。Top

16 楼terry52(天天在线)回复于 2005-12-30 16:44:38 得分 0

后面的几个2的个数其实就是n的值。Top

17 楼mark44404(杨雪)回复于 2005-12-30 17:03:23 得分 0

to:terry52(天天在线)  
  从右往左运算  
  很正确的理解。  
   
  你注意到当a(x,n)x>2的时候的模型是怎样的吗?  
   
  Top

18 楼min_jie(止戈)回复于 2005-12-30 17:42:30 得分 0

标记。。看热闹。。Top

19 楼mark44404(杨雪)回复于 2005-12-30 20:36:28 得分 0

其实报错事因为数太大了。Top

20 楼monica_sh(桃之夭夭)回复于 2005-12-31 09:29:19 得分 0

yun   yun   de   ,Top

21 楼desailly(Grad_BeLLeck)回复于 2005-12-31 09:39:42 得分 0

真有空Top

22 楼mooddecode1980(心情解码)回复于 2005-12-31 09:50:08 得分 0

:)  
   
   
   
  --Top

23 楼terry52(天天在线)回复于 2005-12-31 10:59:37 得分 10

a(m,n)=2^2=4   n=2;  
   
  a(m,0)=0;  
  a(0,n)=2n;  
  a(m,1)=2;  
  a(m,2)=4;  
   
  a(m,n)=2n;       m=0  
  a(m,n)=2^n;     m=1  
  a(m,n)=2^2...^2;     m=2     2的个数为n的值  
  a(m,n)=2^2...^2       n>=m>=3   2的个数为m+n-2   (n>=m>=3)     运算都是从右往左  
  先想到了这么几个,看看是否正确。Top

24 楼jamesfay(狒狒)回复于 2005-12-31 15:22:09 得分 5

f:   2n  
  g:   2^n  
  h:   ...Top

25 楼comerliang(天地良心)(性欲被自己倒分倒没了,以后再也不敢倒分了,想倒分的兄弟看看我的下场吧,男人没了性欲真不爽)回复于 2006-01-06 12:35:40 得分 0

学习Top

26 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-01-06 13:06:20 得分 5

先得做一个支持无限大数的结构才行。Top

27 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-01-06 13:55:47 得分 0

http://community.csdn.net/Expert/topic/4501/4501765.xml?temp=.9421045  
  悬赏编写支持超大整数类……Top

28 楼winterice(冬天的冰)回复于 2006-01-06 16:17:30 得分 2

mark!Top

29 楼mark44404(杨雪)回复于 2006-01-07 00:32:33 得分 0

Ivony()   (   )   你还跑来做广告!!!  
  无限大?A(5,3)就已经超过了宇宙量级了Top

30 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-01-07 10:03:34 得分 0

Ivony()   (   )   你还跑来做广告!!!  
  无限大?A(5,3)就已经超过了宇宙量级了  
   
  ===========================  
   
  忽忽,有时间弄个无限大数类来算算。Top

31 楼tiaoci(我挑刺,我快乐)回复于 2006-01-07 10:46:46 得分 0

应当是  
   
  2^(2^....(2^y))  
   
  中间有   x   个     2^  
  Top

32 楼tiaoci(我挑刺,我快乐)回复于 2006-01-07 10:49:06 得分 0

哦,最后是   2*y,那么应当是  
   
  2^(2^....2^(2*y))  
   
  中间有   x   个     2^()  
  Top

33 楼tiaoci(我挑刺,我快乐)回复于 2006-01-07 10:51:28 得分 10

也就是A(5,3)   =   2^(2^(2^(2^(2^(2*3)))))Top

34 楼blueskygenius(slash)回复于 2006-01-07 10:53:23 得分 2

晕,一头雾水Top

35 楼tiaoci(我挑刺,我快乐)回复于 2006-01-07 10:59:00 得分 0

晕,好像还不对,再看看Top

36 楼lostowner()回复于 2006-01-07 11:26:28 得分 0

学习Top

37 楼Ivony(授人以鱼不如授人以渔,上海谋生)回复于 2006-01-08 22:26:37 得分 10

刚刚花几分钟写了个支持超大整数的类,尽管只支持加法,还不支持负数,但是用来算这道题已经够了,谁有兴趣就拿去算算……  
   
      class   XInt  
      {  
          private   const   int   maxItem   =   1000000000;  
   
          private   List<int>   _value;  
   
          public   XInt(   int   i   )  
          {  
              if   (   i   <   0   )  
                  throw   new   NotSupportedException(   "暂时不支持负数"   );  
               
              _value   =   new   List<int>(   new   int[]   {   0,   0   }   );  
   
              if   (   i   >=   maxItem   )  
                  _value[1]   =   i   /   maxItem;  
   
              _value[0]   =   i   %   maxItem;  
          }  
   
          private   XInt(   List<int>   value   )  
          {  
              this._value   =   value;  
          }  
   
          ///   <summary>  
          ///   重载加法运算符  
          ///   </summary>  
          ///   <param   name="num1">第一个数</param>  
          ///   <param   name="num2">第二个数</param>  
          ///   <returns>加法结果</returns>  
          public   static   XInt   operator   +(   XInt   num1,   XInt   num2   )  
          {  
              XInt   resault   =   num1.Clone();  
              List<int>   valueCollection   =   num2._value;  
              for   (   int   i   =   0;   i   <   valueCollection.Count;   i++   )  
                  resault.Add(   valueCollection[i],   i   );  
   
              return   resault;  
          }  
   
          ///   <summary>  
          ///   从int的隐式类型转换  
          ///   </summary>  
          ///   <param   name="intValue">int类型的数</param>  
          ///   <returns></returns>  
          public   static   implicit   operator   XInt(   int   intValue   )  
          {  
              return   new   XInt(   intValue   );  
          }  
   
          ///   <summary>  
          ///   制作一份拷贝  
          ///   </summary>  
          ///   <returns></returns>  
          public   XInt   Clone()  
          {  
              List<int>   cloneValue   =   new   List<int>(   _value   );  
              return   new   XInt(   cloneValue   );  
          }  
   
          ///   <summary>  
          ///   对指定数位执行加法运算(内部方法,直接修改数)  
          ///   </summary>  
          ///   <param   name="intValue">值</param>  
          ///   <param   name="level">位</param>  
          private   void   Add(   int   intValue,   int   level   )  
          {  
              while   (   _value.Count   <=   level   )  
                  _value.Add(   0   );  
   
              long   resault   =   (long)   _value[level]   +   intValue;  
   
              if   (   resault   >=   maxItem   )  
              {  
                  Add(   (int)   (resault   /   maxItem),   level   +   1   );  
                  _value[level]   =   (int)   (resault   %   maxItem);  
              }  
              else  
                  _value[level]   =   (int)   resault;  
          }  
   
          ///   <summary>  
          ///   重载ToString方法将数值转换为字符串输出  
          ///   </summary>  
          ///   <returns></returns>  
          public   override   string   ToString()  
          {  
              StringBuilder   strBuider   =   new   StringBuilder();  
   
              //这个标志标识是否已经生成首位。  
              bool   flag   =   true;  
   
              for   (   int   i   =   _value.Count   -   1;   i   >=   0;   i--   )  
              {  
                  if   (   flag   &&   _value[i]   !=   0   )  
                  {  
                      strBuider.Append(   _value[i]   );  
                      flag   =   false;  
                  }  
                  else  
                      strBuider.AppendFormat(   "{0:000000000}",   _value[i]   );  
              }  
   
              return   strBuider.ToString();  
          }  
      }  
  Top

38 楼lsfgis(飞鸟)回复于 2006-01-08 22:49:16 得分 0

顶了,学习中Top

39 楼mark44404(杨雪)回复于 2006-01-19 17:01:58 得分 0

真正目的没达到,还是给分八  
  Top

相关问题

  • 【理论基础挑战】我解释不了的一段代码。
  • 挑战自己逻辑推理及数学能力的九宫格﹐想挑战自己的进来。
  • 高手挑战:谁能解释这个删除自己的EXE?
  • 挑战高手
  • 挑战,113分
  • 挑战极限
  • 挑战VC????
  • ☆☆☆☆☆☆高手?挑战☆☆☆☆☆☆
  • ¥¥¥¥¥¥¥¥挑战DirectX¥¥¥¥¥¥
  • 挑战极限.................

关键词

  • 函数
  • 学习
  • acckermann
  • xint
  • maxitem
  • 报错
  • 个数
  • strbuider
  • resault
  • 最大值

得分解答快速导航

  • 帖主:mark44404
  • wengnet
  • shrinerain
  • lovefootball
  • lovefootball
  • lovefootball
  • terry52
  • terry52
  • jamesfay
  • Ivony
  • winterice
  • tiaoci
  • blueskygenius
  • Ivony

相关链接

  • CSDN .NET频道
  • .NET类图书
  • C#类图书
  • .NET类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo