wayne 发表于 2010-5-20 11:13:11

呵呵,我的占用了很多空间,我正在编译boost库,打算用用tuple,看看效果如何

这么多高级语言都有tuple函数,应该有其存在的理由吧,唯独C++ 没有。。。。

wayne 发表于 2010-5-20 11:17:04

查了文档,tuple库只是一堆头文件,不用编译即可拿来使用

gxqcn 发表于 2010-5-20 11:29:32

库只是为了减少重复劳动,简单的问题最好是直接解决。

wayne 发表于 2010-5-20 11:49:21

嗯,老大教训的对。

我最近在学STL和boost呢,这不就把问题往这边想吗

gxqcn 发表于 2010-5-20 12:00:24

千万别说“教训”,我们只是在交流看法。

不管什么库,也是靠人写的,优秀的库不外乎用C及汇编,
所以不存在用库就更快的说法,
除非是库所用算法比自己写的更优秀。

学习STL和boost还是很不错的,
通过阅读大师级的源代码,
对提高自身算法及编码水平是很有帮助的。

gxqcn 发表于 2010-5-20 20:23:48

38# gxqcn

再次小优化:#include <stdio.h>
#include <time.h>

int main(int argc, char* argv[])
{
    unsigned long n, i, v0, v9, d, m;
    double s0, s9;
    time_t sec;

    d = 1;
    m = 9;
    for ( i=1; i<9; ++i )
    {
      d = d * 10;
      m = 9;
    }

    v0 = 1;
    v9 = 0;
    for ( n=1; 10!=n; ++n )
    {
      s9 = s0 = 0.0;
      --m;

      do
      {
            // v9: 下一个含有9的数字
            v9 += 9;
            do
            {
                s0 += 1.0 / v0;
            } while ( v9 != ++v0 );

            // v0: 下一个不含有9的数字
            for ( ++v0, i=1; n!=i && 0==--m; ++i )
            {
                v0 += d;
                m = 9;
            }
            do
            {
                s9 += 1.0 / v9;
            } while ( v0 != ++v9 );

      } while ( n != i );

      time(&sec);

      printf( "n = %u\t%.24s\n", n, ctime(&sec) );
      printf( "s0 = %.15f\ns9 = %.15f\ns0/s9 = %.15f\ns0+s9 = %.15f\n\n", s0, s9, s0/s9, s0+s9 );
    }

    return 0;
}

chyanog 发表于 2010-5-20 20:43:30

41# wayne
f :=
Module[{temp = Tuples, x - 1], t},
{t = Sum, {i, 8}],
   HarmonicNumber - HarmonicNumber - t
   }
]
或(*Total@Sum*)
我用你的思路又改写了一下,效率稍有提高,估计是用加法和乘法替代纯函数调用可以更快的缘故吧。

无心人 发表于 2010-5-21 08:32:44

:Q:

结果和我的不一样啊

无心人 发表于 2010-5-21 08:35:07

看错了,一样的

无心人 发表于 2010-5-21 08:46:18

另外一种思路就是,用cache保存预判信息

不知道,谁写一下,应该速度比较快吧
页: 1 2 3 4 5 [6] 7 8 9 10
查看完整版本: 当n=?时,含9的项之和开始大于不含9的项之和