找回密码
 注册
Simdroid-非首页
查看: 2069|回复: 11

[欧拉习题] PE[31] 小学 5 年级数学题(答对者 + 代码 = 加 1 技术分)

[复制链接]
发表于 2009-11-25 22:26:10 | 显示全部楼层 |阅读模式 来自 上海徐汇区
本帖最后由 FreddyMusic 于 2009-11-29 15:50 编辑

人民币是中国的流通货币。它由如下面额货币组成:

1 分,2 分,5分,1角,2角,5角,1元,2元

如果要组成 2元钱 可以是

2元钱 = 1个*1 元 + 1个*5角 + 2个*2角 + 1个*5分 + 1个*2分+ 3个*1分

你可以使用以上任意货币面额组成 2 元钱,问共有多少种方式?
发表于 2009-11-26 10:31:50 | 显示全部楼层 来自 北京海淀
Simdroid开发平台
本帖最后由 waynebuaa 于 2009-11-26 10:33 编辑

73682
该代码是求出了所有解然后再Length的:
  1. FrobeniusSolve[{1, 2, 5, 10, 20, 50, 100, 200}, 200] // Length
复制代码

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2009-11-26 11:36:28 | 显示全部楼层 来自 上海
代码很帅,就是运行时间长了点。

能缩短运行时间的还有加分。
回复 不支持

使用道具 举报

发表于 2009-11-26 20:50:47 | 显示全部楼层 来自 北京宣武
真的好难!手算我是算不出来,现在的孩子真不得了!
回复 不支持

使用道具 举报

发表于 2010-4-21 23:48:47 | 显示全部楼层 来自 河南郑州
本帖最后由 chyanog 于 2013-4-27 22:35 编辑

真是巧合啊,今天在数学研发网论坛里见到类似的题目(http://bbs.emath.ac.cn/thread-2317-1-1.html),效率还可以,

  1. IntegerPartitions[200, All, {1, 2, 5, 10, 20, 50, 100, 200}] //
  2.   Length // Timing
复制代码
{0.14, 73682}

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2010-4-22 10:19:52 | 显示全部楼层 来自 湖南湘潭
本帖最后由 lin2009 于 2010-4-22 20:01 编辑

C语言版本的程序:得数73682

#include < stdio.h >
int main(void)
{
  int x[] = {1,2,5,10,20,50,100,200};
  
  int t = 200;  // t is total;
  int k = 0 ;
  for (int n0 = 0; n0 <= t/x[0]; n0 ++ )
    {
      for (int n1 = 0; n1 <= ( t - n0*x[0])/x[1]; n1 ++ )
        {
          for (int n2 = 0; n2 <= ( t - n0*x[0] - n1*x[1])/x[2]; n2 ++ )
            {
              for (int n3 = 0; n3 <= ( t - n0*x[0] - n1*x[1] - n2*x[2])/x[3]; n3 ++ )
                {
                  for (int n4 = 0; n4 <= ( t - n0*x[0] - n1*x[1] - n2*x[2] - n3*x[3])/x[4]; n4 ++ )
                    {
                      for (int n5 = 0; n5 <= ( t - n0*x[0] - n1*x[1] - n2*x[2] - n3*x[3] - n4*x[4])/x[5]; n5 ++ )
                        {
                          for (int n6 = 0; n6 <= ( t - n0*x[0] - n1*x[1] - n2*x[2] - n3*x[3] - n4*x[4] - n5*x[5])/x[6]; n6 ++ )
                            {
                              for (int n7 = 0; n7 <= ( t - n0*x[0] - n1*x[1] - n2*x[2] - n3*x[3] - n4*x[4] - n5*x[5] - n6*x[6])/x[7]; n7 ++ )
                                {
                                  int  s = n0*x[0] + n1*x[1] + n2*x[2] + n3*x[3] + n4*x[4] + n5*x[5] + n6*x[6] + n7*x[7] ;
                                  if (s == 200 )
                                    {
                                    //printf("%d %d %d %d %d %d %d %d \n",n0,n1,n2,n3,n4,n5,n6,n7);
                                      k ++ ;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
  printf("\n\t总个数为  %d\n\n",k);
  return 0;
}
回复 不支持

使用道具 举报

发表于 2010-4-22 14:25:28 | 显示全部楼层 来自 甘肃兰州
5# chyanog 确实比2楼的方法要快
回复 不支持

使用道具 举报

发表于 2010-7-13 15:25:57 | 显示全部楼层 来自 北京
本帖最后由 guocong89 于 2010-7-13 15:27 编辑

闲极无聊,做点老题练练手
用标准的动态规划实现,代码稍微复杂,但是实现更加底层
  1. Block[
  2.   {money, cnt, i, j, k},
  3.   money = {1, 2, 5, 10, 20, 50, 100, 200};
  4.   cnt = Table[0, {200}, {8}];
  5.   Table[cnt[[1, i]] = 1, {i, 8}];
  6.   For[i = 2, i < 201, i++,
  7.    For[j = 1, j < 9, j++,
  8.     cnt[[i, j]] = 0;
  9.     For[k = 1, k <= j, k++,
  10.      If[money[[k]] < i, cnt[[i, j]] += cnt[[i - money[[k]], k]],
  11.       If[money[[k]] == i, cnt[[i, j]]++]]]]];
  12.   cnt[[200, 8]]
  13.   ] // Timing
复制代码

运行结果 {0.055991, 73682}

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2013-4-27 23:16:13 | 显示全部楼层 来自 北京
还有一个快速的方法,用生成函数
  1. Coefficient[Series[Product[  1/(1 - x^i), {i, {1, 2, 5, 10, 20, 50, 100, 200}}], {x, 0, 200}],  x^200]
复制代码
回复 不支持

使用道具 举报

发表于 2013-4-29 22:49:42 | 显示全部楼层 来自 江苏南京
chyanog 发表于 2013-4-27 23:16
还有一个快速的方法,用生成函数

用生成函数?不懂,也没有google到。
能详细说一下或是给个相关链接学习吗?

点评

http://www.matrix67.com/blog/archives/120  发表于 2013-4-29 23:56
回复 不支持

使用道具 举报

发表于 2013-4-30 09:10:20 | 显示全部楼层 来自 江苏南京
miniwhale 发表于 2013-4-29 22:49
用生成函数?不懂,也没有google到。
能详细说一下或是给个相关链接学习吗? ...

多谢,我也找到一个英文的,正在看,谢谢!
http://www.math.upenn.edu/~wilf/gfologyLinked2.pdf
回复 不支持

使用道具 举报

发表于 2018-3-10 09:55:08 | 显示全部楼层 来自 江西南昌
长见识了,开心,哈哈。。。。。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-25 15:24 , Processed in 0.045796 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表