小明假期同爸爸一起去书店,他选中了六本书,每本书的单价分别为: 3.1 , 1.7 , 2 , 5.3 , 0.9 和 7.2 。不巧的是,小明的爸爸只带了十几块钱,为了让小明过一个愉快的假期,爸爸仍然同意买书,但提出一个要求,要小明从六本书中选出若干本,使得单价相加所得的和同 10 最接近。你能够帮助小明解决这个问题吗? 给人看的: a - c ( 3.1 , 1.7 , 2 , 5.3 , 0.9 , 7.2 ) b - sapply ( 1 : 6 , function ( i ) combn ( a , i )) # 6 个元素的组合数 d - sapply ( 1 : 6 , function ( i ) apply ( b ], 2 , sum )) # 对组合数求和 f - sapply ( 1 : 6 , function ( i ) which ( abs ( d ]- 10 )= 0.1 )) # 挑出符合条件的下标 h - sapply ( 1 : 6 , function ( i ) length ( f ]))# 提取长度 j - which ( h != 0 ) # 消除 0 l - h n - rep ( j , times = l ) p - unlist ( f ) sapply ( seq ( n ), function ( i ) b ]] ]) ] 3.1 1.7 5.3 ] 2.0 0.9 7.2 ] 1.7 2.0 5.3 0.9 给机器看的: library ( plyr ) a - c ( 3.1 , 1.7 , 2 , 5.3 , 0.9 , 7.2 ) b - sapply ( 1 : 6 , function ( i ) combn ( a , i )) b - lapply ( b , function ( x ) data.frame ( t ( x ))) b - rbind.fill ( b) b