d*z 发帖数: 150 | 1 求证:任取9个1-10之间的整数,可以通过四则混合运算计算出24。
比如对于
1,1,1,1,1,1,1,1,1
可以通过
(1+1+1)*(1+1++1)*(1+1)
产生24。 | r****y 发帖数: 26819 | 2 我先证明9+0:
全1,你已经给出来了。
全2:2*(2+2/2)*((2+2+2+2)/2)
全3:3*((3+3)/3)*((3+3+3+3)/3)
all4: 4*((4+4+4)/4)*(4/4+4/4)
all5: (5+5)*5-5*5-((5/5)*(5/5))
all6: 6*(6/6+6/6+6/6+6/6)
all7: 7+7+7+7/7+7/7+7/7
all8: 8*(8/8+8/8+8*8/8/8)
all9: 9+9+9-9/9-9/9-9/9
all10: 10+10+10/(10/10+10/10)-10/10
谁来接着证吧。 | r****y 发帖数: 26819 | 3 9+0 has 10*c(1,1)=10 possibilities
8+1 has 10*c(9,1)=90 possibilites
7+2 has 10*c(9,2)=360 possibilities
6+3 has 10*c(9,3)=840 p
5+4 has 10*c(9,4)=1260 p
4+5 has 1260
3+6 has 840
2+7 has 360
1+8 has 90
0+9 has 10
so not so many situations to enum them out.
【在 r****y 的大作中提到】 : 我先证明9+0: : 全1,你已经给出来了。 : 全2:2*(2+2/2)*((2+2+2+2)/2) : 全3:3*((3+3)/3)*((3+3+3+3)/3) : all4: 4*((4+4+4)/4)*(4/4+4/4) : all5: (5+5)*5-5*5-((5/5)*(5/5)) : all6: 6*(6/6+6/6+6/6+6/6) : all7: 7+7+7+7/7+7/7+7/7 : all8: 8*(8/8+8/8+8*8/8/8) : all9: 9+9+9-9/9-9/9-9/9
| k**y 发帖数: 320 | 4 dont know what you guys are thinking about...
maybe any 6 numbers can make 24 ok.
it is very easy to work out:
step 1:
find 4-num pairs which cannot make 24.
a simply program takes <30 min can do it.
(there are only 10 to 20 cases)
step 2:
study these 4-num pairs. if we can always find 3 numbers, make them
be a number not among these pairs, everything ok.
else, if we can always find 4 numbers, make them be 2 number not among
these pairs, everything ok also.
【在 d*z 的大作中提到】 : 求证:任取9个1-10之间的整数,可以通过四则混合运算计算出24。 : 比如对于 : 1,1,1,1,1,1,1,1,1 : 可以通过 : (1+1+1)*(1+1++1)*(1+1) : 产生24。
| m*****e 发帖数: 207 | 5 my program is not simple so it takes less than one second to give answers
to all possible cases. I think at least 100 cases have no answer.
【在 k**y 的大作中提到】 : dont know what you guys are thinking about... : maybe any 6 numbers can make 24 ok. : it is very easy to work out: : step 1: : find 4-num pairs which cannot make 24. : a simply program takes <30 min can do it. : (there are only 10 to 20 cases) : step 2: : study these 4-num pairs. if we can always find 3 numbers, make them : be a number not among these pairs, everything ok.
| d*z 发帖数: 150 | 6 OK, there's only 149 4-num pairs cannot make 24.
My 1G 2 CPUs PIII linux tells me it only took 50ms to find all of them :)
time ./engine >result
Command exited with non-zero status 11
0.05user 0.01system 0:00.05elapsed 113%CPU (0avgtext+0avgdata 0maxresident)k
0inputs+0outputs (87major+65minor)pagefaults 0swaps
1,1,1,1
1,1,1,2
1,1,1,3
1,1,1,4
1,1,1,5
1,1,1,6
1,1,1,7
1,1,1,9
1,1,1,10
1,1,2,2
1,1,2,3
1,1,2,4
1,1,2,5
1,1,3,3
1,1,5,9
1,1,5,10
1,1,6,7
1,1,6,10
1,1,7,7
1,1,7,8
1,1,7,9
1,1,8,9
1,1,8,10
【在 k**y 的大作中提到】 : dont know what you guys are thinking about... : maybe any 6 numbers can make 24 ok. : it is very easy to work out: : step 1: : find 4-num pairs which cannot make 24. : a simply program takes <30 min can do it. : (there are only 10 to 20 cases) : step 2: : study these 4-num pairs. if we can always find 3 numbers, make them : be a number not among these pairs, everything ok.
| d*z 发帖数: 150 | 7 我只是感觉你里面的逻辑有些问题,你使用了太多的断定;如果你是认为可以刷选掉大部
分
数据,那还是有一些道理的,可是你使用的是“必然”,这就让人怀疑了。
我只是想告诉你,你这样的思路有问题,或者至少,你这样的说法不对,我并没有任何想
为难任何人的意思。
看来现在大家也没有兴趣了,那就公开一种答案吧。
http://members.lycos.co.uk/huidu/club/club.php?bbsid=53d71c660f9916b6
,
法
”;
人。
【在 r****y 的大作中提到】 : 9+0 has 10*c(1,1)=10 possibilities : 8+1 has 10*c(9,1)=90 possibilites : 7+2 has 10*c(9,2)=360 possibilities : 6+3 has 10*c(9,3)=840 p : 5+4 has 10*c(9,4)=1260 p : 4+5 has 1260 : 3+6 has 840 : 2+7 has 360 : 1+8 has 90 : 0+9 has 10
| k**y 发帖数: 320 | 8 思路没问题,怎么思考都不是问题.结论有问题是真的.
你的解法太麻烦,不是BBS上人做的.另外居然还要消耗参与值,实在过分啊.
再说一下我的想法,版主实在不mark就算了:
基本上四个数中有个4就可以凑成24了,把凑不成的挑出来.
从九个数里总能找<=五个凑成个4.
然后其他数拼拼,回避那几种凑不成的就可以了.
当然不是证明,不过肯定是对的.
偶的officemate也认为六个数就够了,除非manatee捣乱.
【在 d*z 的大作中提到】 : 我只是感觉你里面的逻辑有些问题,你使用了太多的断定;如果你是认为可以刷选掉大部 : 分 : 数据,那还是有一些道理的,可是你使用的是“必然”,这就让人怀疑了。 : 我只是想告诉你,你这样的思路有问题,或者至少,你这样的说法不对,我并没有任何想 : 为难任何人的意思。 : 看来现在大家也没有兴趣了,那就公开一种答案吧。 : http://members.lycos.co.uk/huidu/club/club.php?bbsid=53d71c660f9916b6 : : , : 法
| X****r 发帖数: 3557 | 9 int i,x[9] = {1,1,1,1,1,1,1,1,1};
do {
count ++ ; // or other processing codes
i = 8 ;
do {
if( ++x[i] > 10 ) {
i -- ;
}else {
for( i ++ ; i < 9 ; i ++ ) {
x[i] = x[i-1] ;
}
}
}while( i >= 0 && i < 9 );
}while( i >= 0 );
【在 k**y 的大作中提到】 : 思路没问题,怎么思考都不是问题.结论有问题是真的. : 你的解法太麻烦,不是BBS上人做的.另外居然还要消耗参与值,实在过分啊. : 再说一下我的想法,版主实在不mark就算了: : 基本上四个数中有个4就可以凑成24了,把凑不成的挑出来. : 从九个数里总能找<=五个凑成个4. : 然后其他数拼拼,回避那几种凑不成的就可以了. : 当然不是证明,不过肯定是对的. : 偶的officemate也认为六个数就够了,除非manatee捣乱.
| X****r 发帖数: 3557 | 10 偶用的katy的土土的代码是那个九重循环, 所以最后一段拼凑痕迹很重:)
其实偶后来自己也写了一段一样功能的, 但懒得改程序了.
算24的程序是用自己以前的程序. 就算以前没编过Programming 上有好多这样的程序呢
# include
# include
# include
# include
struct opr {
enum tp { ad, sb, bs, ml, dv, vd } type ;
opr() : type(ad) {}
void error() const {
cerr << "Internal Error" << endl;
exit(-1);
}
bool next(void) {
switch(type) {
case ad:
type = sb ;
return true ;
case sb:
type = bs ;
return true ;
cas
【在 d*z 的大作中提到】 : 我只是感觉你里面的逻辑有些问题,你使用了太多的断定;如果你是认为可以刷选掉大部 : 分 : 数据,那还是有一些道理的,可是你使用的是“必然”,这就让人怀疑了。 : 我只是想告诉你,你这样的思路有问题,或者至少,你这样的说法不对,我并没有任何想 : 为难任何人的意思。 : 看来现在大家也没有兴趣了,那就公开一种答案吧。 : http://members.lycos.co.uk/huidu/club/club.php?bbsid=53d71c660f9916b6 : : , : 法
| d*z 发帖数: 150 | 11 //Found a bug:
opr p[1024]; should not be defined as static:
I have modify the the program to calculate 24 for all 4 numbers,
and found the program fails to list 4599 and 4799.
After modify the static opr p[1024], the program gets correct result.
int test( int n, double x[] ) {
static opr p[1024] ;
static int t[1024] ;
int i, j ;
sort( x, x+n );
reset_tree( n, t );
do {
do {
do {
if( fabs( eval_tree( n, t, x, p ) - target ) < 1e-6 ) {
print_tree( n, t, x, | w***t 发帖数: 96 | 12 yep, the program is slow when all the numbers are small or all the numbers
are bi and superfast for numbers in the middle.
It is normal though. Depend on how many expressions exist for a given set
of numbers. The more ways there are, the faster to find one and quit.
It is impossible to find all the solution la. And if the number zone is
from 10-20, the runtime would be unacceptable.
Or in other words, the speed depend on your luck. However, if you have this
in mind, you can change the order you
【在 d*z 的大作中提到】 : //Found a bug: : opr p[1024]; should not be defined as static: : I have modify the the program to calculate 24 for all 4 numbers, : and found the program fails to list 4599 and 4799. : After modify the static opr p[1024], the program gets correct result. : int test( int n, double x[] ) { : static opr p[1024] ; : static int t[1024] ; : int i, j ; : sort( x, x+n );
| d*z 发帖数: 150 | 13 That's easy. There're C(40,4) different ways to take 4 cards from 40 cards.
There're total 11454 cases cannot result in 24.
There possibility cannot getting 24 is 12.5% |
|