| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1347 人关注过本帖
标题:各位好友!下面这个题目希望谁能给个思路,不需要具体代码!要的是想法!谢 ...
只看楼主 加入收藏
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
递归怎么算法呢 以上都未经测试 只能用做算法






我要成为嘿嘿的黑客,替天行道
2012-08-29 03:50
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
公式是F(10的i次方)=F(10的i-1次方)+10的I次方

[ 本帖最后由 zhu224039 于 2012-8-29 04:08 编辑 ]

我要成为嘿嘿的黑客,替天行道
2012-08-29 03:53
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
这个还得分情况  我的神仙,我写个代码要出人命,上面的公式不对  是归纳出来的,与实际处理数据有不兼容的地方,此方程式只适合 0-99 100- 999  1000-9999 这样的整块

我要成为嘿嘿的黑客,替天行道
2012-08-29 03:58
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
递归公式出来了
已知 1<=a<=99 ,j={0,1}  f(j)=a
求 x>=100的问题 即j>1  的时候
对于 以1为最高位的
f(2)=((x+1)%100)+f(j) 此时的a=x%100  按照我上述算法推出
f(3)=((x+1)%10x10x10)+f(2)  此时的a=x%1000;
对于1不是最高位的
f(2)=f(j)
f(3)=f(2)
这个鸟毛的递归调用就是要靠什么 表达式推理要正确,俺是个数学白痴份子,推到这 还请各位考究
这个只是计算出了 数在区域0-99 a[j]00-a[j]99  a[j]000-a[j]999 区间的数字带1的总数  还得加上前面的数才对,我的天 睡着了,突然想到 我的推理的范围在哪
还得加上块外的数据才对快外 假如 1个数是1500  上面的算法就只能计算出1000-1500范围内的个数  1000以下的并未计算在内,所以俺得接着推
1000以下的函数,两者相加 才能满足要求。
 0-99 数是20 100-199 数是100+20=120 200-299 20 300-399 20  知道了  除了100-199的数据是得  用100-999={100+20,20,20,20,20,20,20,20,20,20}
这个地方怎么那么像 咱们给出的 表 0-99 和 100-19   也就是20*10+100 =300  
1000-1999  1000+300 2000-2999  300  3000-3999 300   1 2 3 4 5 6 7 8 9 ={1000+300,300,300,300,300,300,300,300,300}
1000+300*10=4000
这样就很清楚了
已知f(1)=20   f(1)=jisuan(99)=20
f(2)=10*f(1)+10*10   
f(3)=10*f(2)+10*10*10
归纳出
f(n)=f(n-1)*10+10的N次方
由于计算是计算出了他当前的块中的个数 那么就的把那个块给不算在内,数最高的位决定块 所以
n=j-1
这个递归函数位置 不够了 我在下一个版面给补上 取名为 int jishu2(int n,int m) 这个函数是计算低1位的个数  比如 现在要求的是1500 那么这个函数计算的个数就是0-999的
如果是2500 或者3500  那么还剩下1部分没加上去 那么就是 a[j]-1>1&&j>=2 满足这个要求才能进行计算  睡不着啊 接着改 这部分值很好求 f(n)=f(n-1)*10+10的N次方的
10 改下个a[j]-1  就可以了。大家重新看 F(1) F(2) f(3)的算法 其实他们就单个来说只有个9个数相加 第10个数是加了他上一层得dao de数据
所以  a[j]此时 用公式  (f(n)-10的N次方)*(a[j]-1)/10 可以计算得到。

也就是 最高位 a[j]

这个就可以一直往后推了  

刚才给出的算法求解函数得合并下   才能进行递归调用

int jishu(int num)
{
 int num1,i,j,n,n1=1,m;
  i=num;
  for(i=i/10;i>0;i=i/10 ){
    a[j]=i%10;           %是不是求余啊 搞忘记了  反正这个地方是求余的地方,5/10的余数是不是为5呢? 脑袋晃悠了 弄不楚               
    j++;                   用 j 记下 数有个位  位 说的是个十百千万                                                      
  }
  a[j]=i%10;               因为最后一个余数在循环体内是取不到的
if(j<=1)                   j={0,1} 为0 代表只有各位数 1代表10位,这个判定的就是0-99的数值了 总共是100个
 {
    if(num>=1&&num<9)                当他为各位的时候 NUM1是为各位的情况了的

     {                  
     num1=1;
          }              
  if(num=0)                          这个是用在大数求解的情况的 假如数字是 100呢 就完蛋了 没这个就完蛋
    {
     num1=0;
          }     
  if(a[j]==1){                     a[j]的值存放的是数的十位  对应的是 10-19 这个部分的
     if(a[j-1]>=1)
     num1=a[j-1]+2;
     else
     num1=1;
     num1+=1;
   }
   else if(a[j]>=1){               这个对应的是 20-99部分的
      if(a[j-1]>=1)
      num1=1;
      else
      num1=0;
      num1+=a[j]-1+11;
    }
}
 else
 {
      for(n=j;n>0;n--)       这个是为了计算 10*10*10的
      n1=10*n1;
    if(a[j]==1)
      num1=(num+1)%n1+jishu((num1+1)%n1);    递归函数了 照着推理上面的函数套用就可以了,递归求解问题都是什么  F(X)=F(X的表达式)+。。。。。什么类型的
   else
      num1=jishu((num1+1)%n1);
  }
  if(j>1)
   {
    num3=jishu2(j-1);
    num1=num1+num3;
    }
    if(a[j]-1>1&&j>2)
   {
    num4=((nun3-n1/10)*(a[i]-1))/10+n1/10;
   num1=num1+num4;
   }   
   return num1;
}


以上代码未经本人上机测试 ,只可作为算法  参考,深夜构思算法 在代码或者算法的正确性方面不能做出保证,还请各位老师和同学们给予指正


[ 本帖最后由 zhu224039 于 2012-8-29 12:51 编辑 ]

我要成为嘿嘿的黑客,替天行道
2012-08-29 05:07
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
睡觉

我要成为嘿嘿的黑客,替天行道
2012-08-29 05:47
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
醒来要等你们的验证和更正的啊,又是一个通宵

我要成为嘿嘿的黑客,替天行道
2012-08-29 05:54
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
int jishu2(int n)
 {
   int num1,i,num2=1,num3;
   if(n==1)
   num1=20;
   else{
    for(i=n;i>0;i--)
    num2=10*num2;
    num1=10*jishu2(n-1)+num2;
   }
 ruturn (num1);
}

int jishu(int num)
{
int num1,i,j,n,n1=1;
  i=num;
  for(i=i/10;i>0;i=i/10 ){
    a[j]=i%10;           %是不是求余啊 搞忘记了  反正这个地方是求余的地方,5/10的余数是不是为5呢? 脑袋晃悠了 弄不楚               
    j++;                   用 j 记下 数有个位  位 说的是个十百千万                                                      
  }
  a[j]=i%10;               因为最后一个余数在循环体内是取不到的
if(j<=1)                   j={0,1} 为0 代表只有各位数 1代表10位,这个判定的就是0-99的数值了 总共是100个
{
    if(num>=1&&num<9)                当他为各位的时候 NUM1是为各位的情况了的

     {                  
     num1=1;
          }              
  if(num=0)                          这个是用在大数求解的情况的 假如数字是 100呢 就完蛋了 没这个就完蛋
    {
     num1=0;
          }     
  if(a[j]==1){                     a[j]的值存放的是数的十位  对应的是 10-19 这个部分的
     if(a[j-1]>=1)
     num1=a[j-1]+2;
     else
     num1=1;
     num1+=1;
   }
   else if(a[j]>=1){               这个对应的是 20-99部分的
      if(a[j-1]>=1)
      num1=1;
      else
      num1=0;
      num1+=a[j]-1+11;
    }
}
else
{
      for(n=j;n>0;n--)       这个是为了计算 10*10*10的
      n1=10*n1;
    if(a[j]==1)
      num1=(num+1)%n1+jishu((num1+1)%n1);    递归函数了 照着推理上面的函数套用就可以了,递归求解问题都是什么  F(X)=F(X的表达式)+。。。。。什么类型的
   else
      num1=jishu((num1+1)%n1);
  }
    if(j>1)                                   这个是计算余下的块,有个疑问 毕竟自己只是看了一遍C  就是 递归会不会像进程一样吧我这个块也给我运行了 求解
   {                                           我是觉得不太可能,不管了 反正也是给大家一个思路
    num3=jishu2(j-1);
    num1=num1+num3;
    }
  if(a[j]-1>1&&j>2)
   {
    num4=((nun3-n1/10)*(a[i]-1))/10+n1/10;
   num1=num1+num4;
    }   

    return num1;
}




   

[ 本帖最后由 zhu224039 于 2012-8-29 08:29 编辑 ]

我要成为嘿嘿的黑客,替天行道
2012-08-29 06:51
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
这个就是补齐后的代码,所有的思路都写下来了,楼主应该是满意了吧。而且是给你看了我 一步一步的怎么构思下去的。当中没少填补。先不说对不对吧,反正也算是种交流吧,希望共勉  呵呵额

[ 本帖最后由 zhu224039 于 2012-8-29 06:54 编辑 ]

我要成为嘿嘿的黑客,替天行道
2012-08-29 06:52
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
算了吧,不想了,睡觉。最怕的就是什么排序 什么神马 数学题

我要成为嘿嘿的黑客,替天行道
2012-08-29 08:47
zhu224039
Rank: 8Rank: 8
等 级:贵宾
威 望:17
帖 子:862
专家分:792
注 册:2012-7-29
收藏
得分:0 
这个居然没人看,饭后自己调试把。哎 伤心的一B

我要成为嘿嘿的黑客,替天行道
2012-08-29 12:47
快速回复:各位好友!下面这个题目希望谁能给个思路,不需要具体代码!要的是想法 ...
数据加载中...
 
   



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

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