找回密码
 快速注册
搜索
查看: 146|回复: 18

[组合] 三张点数之和为9,19,29,最后留一张3

[复制链接]

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

abababa 发表于 2022-11-29 18:09 |阅读模式
扑克牌中只留下各种花色的1-10,其余抽出,按以下规则操作:
1.把牌摞成一摞,放在手里,从最上面开始取牌,依次把牌放下,后放的一张压在前一张上面。
2.如果放下的连续三张点数之和是9或19或29,则把这三张取出,并放回牌摞的最下面。求点数之和时,首尾视为相邻,例如总共摆下10张牌,第一张牌是9,最后两张牌是10、10,也视为连续三张满足条件。
3.一直操作,直到最后剩下一张3,终止操作。

我的问题是,按前两条那样操作,最后是否必然剩下一张3?有没有可能永远都无法终止游戏?

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-11-30 15:42
用$n(x,y,z)$表示$n$个可能的三张满足条件的牌型,例如$3(7,1,1)$,表示最终结果里有$3$个$7+1+1=9$的牌型。

所有满足条件的牌型为
a_1(7,1,1)
a_2(6,2,1)
a_3(5,3,1)
a_4(5,2,2)
a_5(4,4,1)
a_6(4,3,2)
b_1(10,8,1)
b_2(10,7,2)
b_3(10,6,3)
b_4(10,5,4)
b_5(9,9,1)
b_6(9,8,2)
b_7(9,7,3)
b_8(9,6,4)
b_9(9,5,5)
b_{10}(8,8,3)
b_{11}(8,7,4)
b_{12}(8,6,5)
b_{13}(7,7,5)
b_{14}(7,6,6)
c_1(10,10,9)

没有其它牌型了,并且需要满足至多4个1,4个2……,所以能列出不等式组来,最后应该是解不定方程,但这个方程我用Mathematica解,时间太长了,也没解出来,我用的是下面这样的:
  1. Reduce[0 <= 2 a1 + a2 + a3 + a5 + b1 + b5 <= 4 &&
  2.   0 <= a2 + 2 a4 + a6 + b2 + b6 <= 4 &&
  3.   0 <= a3 + a6 + b3 + b7 + b10 <= 4 &&
  4.   0 <= 2 a5 + a6 + b4 + b8 + b11 <= 4 &&
  5.   0 <= a3 + a4 + b4 + 2 b9 + b12 + b13 <= 4 &&
  6.   0 <= a2 + b3 + b8 + 2 b14 <= 4 &&
  7.   0 <= a1 + b2 + b7 + b11 + 2 b13 + b14 <= 4 &&
  8.   0 <= b1 + b6 + 2 b10 + b11 + b12 <= 4 &&
  9.   0 <= 2 b5 + b6 + b7 + b8 + b9 + c1 <= 4 && 0 <= 2 c1 <= 4 &&
  10.   4 >= a1 >= 0 && 4 >= a2 >= 0 && 4 >= a3 >= 0 && 4 >= a4 >= 0 &&
  11.   4 >= a5 >= 0 && 4 >= a6 >= 0 && 4 >= b1 >= 0 && 4 >= b2 >= 0 &&
  12.   4 >= b3 >= 0 && 4 >= b4 >= 0 && 4 >= b5 >= 0 && 4 >= b6 >= 0 &&
  13.   4 >= b7 >= 0 && 4 >= b8 >= 0 && 4 >= b9 >= 0 && 4 >= b10 >= 0 &&
  14.   4 >= b11 >= 0 && 4 >= b12 >= 0 && 4 >= b13 >= 0 && 4 >= b14 >= 0 &&
  15.   4 >= c1 >= 0, {a1, a2, a3, a4, a5, a6, b1, b2, b3, b4, b5, b6, b7,
  16.   b8, b9, b10, b11, b12, b13, b14, c1}, Integers]
复制代码


如果能解出来,那就是所有可能的形式吧,再把那些点数加起来,最后和牌的总点数220比较,差一个3就对了,说明如果能终止操作,最终必定留下一张3。但证明不了一定能终止操作,我感觉会有某种形式,如果不调换牌的次序,将一直循环下去。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-12-1 13:24
abababa 发表于 2022-11-30 15:42
用$n(x,y,z)$表示$n$个可能的三张满足条件的牌型,例如$3(7,1,1)$,表示最终结果里有$3$个$7+1+1=9$的牌型 ...

最后的代码是这样的:
  1. Reduce[3 <= 2 a1 + a2 + a3 + a5 + b1 + b5 <= 4 &&
  2.   3 <= a2 + 2 a4 + a6 + b2 + b6 <= 4 &&
  3.   3 <= a3 + a6 + b3 + b7 + b10 <= 4 &&
  4.   3 <= 2 a5 + a6 + b4 + b8 + b11 <= 4 &&
  5.   3 <= a3 + a4 + b4 + 2 b9 + b12 + b13 <= 4 &&
  6.   3 <= a2 + b3 + b8 + 2 b14 <= 4 &&
  7.   3 <= a1 + b2 + b7 + b11 + 2 b13 + b14 <= 4 &&
  8.   3 <= b1 + b6 + 2 b10 + b11 + b12 <= 4 &&
  9.   3 <= 2 b5 + b6 + b7 + b8 + b9 + c1 <= 4 && 3 <= 2 c1 <= 4 &&
  10.   4 >= a1 >= 0 && 4 >= a2 >= 0 && 4 >= a3 >= 0 && 4 >= a4 >= 0 &&
  11.   4 >= a5 >= 0 && 4 >= a6 >= 0 && 4 >= b1 >= 0 && 4 >= b2 >= 0 &&
  12.   4 >= b3 >= 0 && 4 >= b4 >= 0 && 4 >= b5 >= 0 && 4 >= b6 >= 0 &&
  13.   4 >= b7 >= 0 && 4 >= b8 >= 0 && 4 >= b9 >= 0 && 4 >= b10 >= 0 &&
  14.   4 >= b11 >= 0 && 4 >= b12 >= 0 && 4 >= b13 >= 0 && 4 >= b14 >= 0 &&
  15.   4 >= c1 >= 0 &&
  16.   210 <= 9 (a1 + a2 + a3 + a4 + a5 + a6) +
  17.     19 (b1 + b2 + b3 + b4 + b5 + b6 + b7 + b8 + b9 + b10 + b11 + b12 +
  18.         b13 + b14) + 29 c1 <= 220 &&
  19.   2 a1 + a2 + a3 + a5 + b1 + b5 + a2 + 2 a4 + a6 + b2 + b6 + a3 + a6 +
  20.      b3 + b7 + b10 + 2 a5 + a6 + b4 + b8 + b11 + a3 + a4 + b4 + 2 b9 +
  21.      b12 + b13 + a2 + b3 + b8 + 2 b14 + a1 + b2 + b7 + b11 + 2 b13 +
  22.     b14 + b1 + b6 + 2 b10 + b11 + b12 + 2 b5 + b6 + b7 + b8 + b9 +
  23.     c1 + 2 c1 == 39, {a1, a2, a3, a4, a5, a6, b1, b2, b3, b4, b5, b6,
  24.   b7, b8, b9, b10, b11, b12, b13, b14, c1}, Integers]
复制代码


然后
  1. f[k_] := (%1[[k]][[1]][[2]] + %1[[k]][[2]][[2]] + %1[[k]][[3]][[2]] + \
  2. %1[[k]][[4]][[2]] + %1[[k]][[5]][[2]] + %1[[k]][[6]][[2]])*9 + \
  3. (%1[[k]][[7]][[2]] + %1[[k]][[8]][[2]] + %1[[k]][[9]][[2]] + \
  4. %1[[k]][[10]][[2]] + %1[[k]][[11]][[2]] + %1[[k]][[12]][[2]] + \
  5. %1[[k]][[13]][[2]] + %1[[k]][[14]][[2]] + %1[[k]][[15]][[2]] + \
  6. %1[[k]][[16]][[2]] + %1[[k]][[17]][[2]] + %1[[k]][[18]][[2]] + \
  7. %1[[k]][[19]][[2]] + %1[[k]][[20]][[2]])*19 + %1[[k]][[21]][[2]]*29
  8. Table[f[k], {k, 1, Length[%1]}]
复制代码


列表里全是217,说明如果能终止操作,那么最后必定剩下一张3。

现在就是最后是否一定能终止操作,会不会进入某个循环,出不来。

48

主题

361

回帖

3034

积分

积分
3034

显示全部楼层

业余的业余 发表于 2022-12-2 06:18
可能是我没有理解游戏的规则,问题:
1. 如果拿出的第一张就是3, 算不算达成目标游戏结束?

否则,如果
2. 取出的4张一次是3,2,5,2, 收回2,5,2(放在最下面), 这时盘面只剩3,算不算游戏结束?

否则,
3. 盘面剩一张3, 手里的39张都是回收过的了,也就是说39张一顺序分成13个相继的三张牌的小组,每组都满足数字和以9结尾,这应该肯定算达成目标了,但怎样知道现在不是处于情形2呢?记住手里的牌是否都到牌桌上溜达过至少一圈了?

4. 一个可能不重要的技术问题,假如牌桌为空,我从手里依次取出4,3,2, 收回时,我依然保持4,3,2的顺序吗?

5. 如果找到一种排列,使得40张牌中任何相继的三张(包括首1和尾2 及 首2和尾1), 其和的十进制表示不含9,那么这算个死局吧?能从数学上证明这样的排列不存在吗?或者相反,能找到至少一个这样的例子吗?

以上可能是因为对规则不完全了解或者了解的不够深入,请澄清或说明不可能或不重要。谢谢!

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-12-2 09:31
业余的业余 发表于 2022-12-2 06:18
可能是我没有理解游戏的规则,问题:
1. 如果拿出的第一张就是3, 算不算达成目标游戏结束?


第一和第二条,都不算游戏结束,因为必须保证除了牌桌上的3以外,牌摞里的牌满足连续三张的和是9或19或29,如果第一张就是3,牌摞里的牌能满足这个条件,才算游戏结束,不然不算。
第三条,比如现在牌桌上有一张3,然后从牌摞里拿出一张方块6,这时继续从牌摞里取牌,因为每连续三张都满足条件,从而又被收回到牌摞里,最后肯定牌桌上有一张3,然后再次取出这张方块6,这时因为除了3、6外没有其余牌,说明已经循环一轮,就结束了。
我觉得第四条很重要,如果存在某种循环使得牌桌上不能仅留下一张3,当改变收回的次序时,可能就会打破这种循环。比如收回432,放出还是432,可能会陷入循环(……10,7,4,3,2),但如果收回234,那么先放2时,就可以和前面的10,7组合,从而先被收回,这时432就不再是一组了,可能会打破循环。
第五条,因为3楼已经解出了这个不定方程,所以如果游戏能终止,必定只留下一张3,如果不能终止,说明陷入了循环,那么根据第四条,还得证明改变收回次序后,第五条仍然能成立才行。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-12-2 09:42
abababa 发表于 2022-12-2 09:31
第一和第二条,都不算游戏结束,因为必须保证除了牌桌上的3以外,牌摞里的牌满足连续三张的和是9或19或29 ...


我认为在可以无序收回的情况下,游戏必定能终止,因为可以排到任意顺序,说明所有的排列方式都能轮到,从而必定包含3楼的那几个解,而那几个解就能使游戏终止。

48

主题

361

回帖

3034

积分

积分
3034

显示全部楼层

业余的业余 发表于 2022-12-2 10:24
abababa 发表于 2022-12-2 09:42
我认为在可以无序收回的情况下,游戏必定能终止,因为可以排到任意顺序,说明所有的排列方式都能轮到,从 ...

谢谢澄清。

5的情形确实不存在,因为牌是一张一张发的,头两张确定后,一定存在某张牌,使得它与第一第二张能满足合含9,从而这样的死局不可能存在。


48

主题

361

回帖

3034

积分

积分
3034

显示全部楼层

业余的业余 发表于 2022-12-2 10:38
业余的业余 发表于 2022-12-2 10:24
谢谢澄清。

5的情形确实不存在,因为牌是一张一张发的,头两张确定后,一定存在某张牌,使得它与第一第 ...

或许可以证明,在有序收回的情况下,也能保证牌局的终止。能不能证明手里的牌完成一次到桌履行后,匹配的组数(3k+1, 3k+2, 3k+3位置上的三张牌为一个组,如果该组满足合含9, 我们称它为一个匹配组。能否证明匹配组数在一次全旅游(从有第一个回收的匹配组开始,到这个匹配组,或包含这个匹配组中的某一张或某两张的匹配组再次回都手中作为最底下3张牌,我们称完成了一次全旅行,下一次以新的这个匹配组为计算全旅行的起点)。匹配组数在全旅行之间显然不减,能否证明到完成全匹配(即游戏结束)之前,匹配组数单增? 或者每1-3次全旅行后,匹配组数会增加,直到游戏结束(全匹配组数=13)?

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-12-2 11:55
业余的业余 发表于 2022-12-2 10:38
或许可以证明,在有序收回的情况下,也能保证牌局的终止。能不能证明手里的牌完成一次到桌履行后,匹配的 ...

这个游戏我很早以前玩过,当时确实有少数的局面会陷入循环,但我不能确定中间有没有可收回而没收回的情况,因为要求只要出现可收回的就必须收回。所以我对有序收回也必定能终止游戏的结论还是怀疑。

48

主题

361

回帖

3034

积分

积分
3034

显示全部楼层

业余的业余 发表于 2022-12-2 12:35
本帖最后由 业余的业余 于 2022-12-2 13:03 编辑
abababa 发表于 2022-12-2 11:55
这个游戏我很早以前玩过,当时确实有少数的局面会陷入循环,但我不能确定中间有没有可收回而没收回的情况 ...


@abababa

8 楼的猜测貌似不成立。这样的排列如果按入桌顺序收回的话,是个死局。
2 2 4 5 5 5 5 7 8 8 8 10 10 3 3 3 2 3 4 1 4 4 6 6 7 6 6 7 1 1 7 1 9 9 2 8 9 10 9 10

这是从 从自然序起的第二个排列,即
1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 8 9 9 9 10 9 10 10 10
衍生而来的。随机序收回不知道是否可以总是确保突破死局。

测试程序 CardSum.cpp:
  1. #include <iostream>
  2. #include <deque>
  3. #include <cassert>
  4. #include <iterator>
  5. class Game{
  6. public:
  7.     template <class Iter>
  8.     Game(Iter beg, Iter end)
  9.     {
  10.         while(beg != end){
  11.             onhand.push_back(*beg);
  12.             ++beg;
  13.         }
  14.     }
  15.    
  16.     // the cards on hand, while facing down, the topmost one is front and
  17.     //  the bottom most one is back
  18.     //
  19.     // the cards on the table, while facing up, the bottom most one is front
  20.     // and the topmost one is the back.
  21.     //
  22.     // basically, when held as a deck, the card whose face is exposed is
  23.     // the back one, while the one whose back is exposed is the front one.
  24.     //
  25.     // when taking back matching groups, the one that's first out will be the one first in
  26.     void deal_one(){
  27.         
  28.         ontable.push_back(onhand.front());
  29.         onhand.pop_front();
  30.         if(ontable.size() >= 3){
  31.             check( ontable.size() - 3, ontable.size() - 2, ontable.size() - 1) ||
  32.             (
  33.                 ontable.size() >= 4 &&
  34.                 (
  35.                     check( 0, ontable.size()-2, ontable.size()-1 ) ||
  36.                     check( 0, 1, ontable.size()-1 )
  37.                 )
  38.             );
  39.         }
  40.     }
  41.    
  42.     // (i,j,k) can be one of (0, index of last two elements), (0,1, index of last element)
  43.     //   and (index of last 3 elements);
  44.     bool check(size_t i, size_t j, size_t k) {
  45.         
  46.         assert( ontable.size() > i && ontable.size() > j && ontable.size() > k);
  47.         auto sum = ontable[i] + ontable[j] + ontable[k];
  48.         if( sum%10 == 9){
  49.             int c[3];
  50.             if( i == 0 ){
  51.                 c[0] =  ontable.front();
  52.                 ontable.pop_front();
  53.                
  54.                 int last_index;
  55.                 if( j == 1 ){
  56.                     c[1] = ontable.front();
  57.                     ontable.pop_front();
  58.                     last_index = 2;
  59.                 }else{
  60.                     c[2] = ontable.back();
  61.                     ontable.pop_back();
  62.                     last_index = 1;
  63.                 }
  64.                 c[last_index] = ontable.back();
  65.                 ontable.pop_back();
  66.             }else{
  67.                 c[0] = ontable[ontable.size()-3];
  68.                 c[1] = ontable[ontable.size()-2];
  69.                 c[2] = ontable[ontable.size()-1];
  70.                 ontable.pop_back();
  71.                 ontable.pop_back();
  72.                 ontable.pop_back();
  73.             }
  74.             onhand.push_back( c[0] );
  75.             onhand.push_back( c[1] );
  76.             onhand.push_back( c[2] );
  77.             
  78.             ++n_matching_group;
  79.             return true;
  80.         }
  81.         
  82.         return false;
  83.     }
  84.    
  85.     bool run()
  86.     {
  87.         n_matching_group = 0;
  88.         while( n_matching_group < 13 )
  89.         {
  90.             auto n = onhand.size();
  91.             n_matching_group = 0;
  92.             while( n-- > 0 )
  93.                 deal_one();
  94.             
  95.         }
  96.         return ontable.back() == 3;
  97.     }
  98.    
  99.     void test()
  100.     {
  101.         // note: the max number of matching group that can be derived from the
  102.         // second permuation is 10
  103.         while( n_matching_group < 13 )
  104.         {
  105.             auto n = onhand.size();
  106.             n_matching_group = 0;
  107.             while( n-- > 0 ){
  108.                 deal_one();
  109.                 std::cout<<"On hand: ";
  110.                 copy(onhand.begin(), onhand.end(), std::ostream_iterator<int>( std::cout, " "));
  111.                 std::cout<<"\nOn table: ";
  112.                 copy(ontable.begin(), ontable.end(), std::ostream_iterator<int>( std::cout, " "));
  113.                 std::cout<<"\nmatching group: " << n_matching_group << "\n";
  114.             }
  115.         }
  116.     }
  117. private:
  118.     std::deque<int> onhand;
  119.     std::deque<int> ontable;
  120.     int                n_matching_group = 0;
  121. };
  122. void run_tests()
  123. {
  124.     int c[40];
  125.    
  126.     for(int i=1, m=0; i<=10; ++i)
  127.         for( int j=0; j<4; ++j)
  128.             c[m++] = i;
  129. //    std::next_permutation(c, c + 40);
  130.     do{
  131.         static int i;
  132.         ++i;
  133.         
  134.         Game g(c, c+40);
  135.         
  136. //        g.test();
  137. //        break;
  138.         
  139.         std::cout << i <<": " << std::boolalpha << g.run() <<"\n";
  140.     }while( std::next_permutation(c, c + 40) );
  141. }
  142. int main()
  143. {
  144.     run_tests();
  145.     return 0;
  146. }
复制代码


程序没有仔细测试,不知道是否因为是程序的逻辑错误。乱序(随机)收回是否能确保破局,有空再测测。确保这个字用的不对,这个问题的状态空间太大,遍历用图灵机应无可能:如果在我们有限的测试中找到了反例,说明问题本身有问题,否则,不能保证绝无问题。那么要说任何排列都可以演化到手里有13个匹配组,那只能通过数学(逻辑)的方法来达成。

所有成功得到手中有13个匹配组的情形,剩下桌面的那张牌必是 3, 这可以用 模 10 trivially 证明。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-12-3 10:09
业余的业余 发表于 2022-12-2 12:35
@abababa

8 楼的猜测貌似不成立。这样的排列如果按入桌顺序收回的话,是个死局。

我不懂程序,这个能列出中间的所有移动步骤吗?

还有最后剩下一张3,请问要怎么用模10来证明?我最开始就是想这样证明,但没想出来,后来想穷举的话可能可以证明,最开始穷举的还太多了,软件算了很长时间都没算出来。

48

主题

361

回帖

3034

积分

积分
3034

显示全部楼层

业余的业余 发表于 2022-12-3 11:33
abababa 发表于 2022-12-3 10:09
我不懂程序,这个能列出中间的所有移动步骤吗?

还有最后剩下一张3,请问要怎么用模10来证明?我最开始 ...


@abababa

我试了一下改变收牌的顺序,确实把先前的很多死局走活了。能不能用这个策略把所有的都走活,我准备测试一下,或者能得到一个走不活的死局,或者测试数十万随机序的初始排列,如果都能走活,那就说有较大的可能所有的题都可以解。

关于模10,

1. 显然有所有40个数的合用10取模余数为0 (1+9, 2+8,3+7,4+6, 5+5, 10);

2. 假如我们以某种方式得到手中的39张牌刚好第1,2,3 张满足合的余数模10为9, 第4,5,6 张满足合的余数模10为9, ...第37,38,39张满足合的余数模10为9, 这样手中所有牌的合模10 =13*9 (mod 10) = 7 (mod 10).

显然余下的一张,即桌面上剩的那张 = 3(mod 10), 又因为牌的面值是1 到 10, 故其必为 3.

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-12-3 11:59
业余的业余 发表于 2022-12-3 11:33
@abababa

我试了一下改变收牌的顺序,确实把先前的很多死局走活了。能不能用这个策略把所有的都走活,我 ...

原来如此,总和等于220,如果能终止的话,那么设和为9,19,29的分别有$n_1,n_2,n_3$组,虽然不知道具体是多少,但必定有$n_1+n_2+n_3=(40-1)/3=13$,这样就是求关于$x$的方程
\[220-x\equiv9n_1+19n_2+29n_3\pmod{10}\]
的解,其中$x$是整数且$1\le x\le10$。而上式右边模10就是$(9n_1+9n_2+9n_3)\bmod10=9(n_1+n_2+n_3)\bmod10=9\cdot13\bmod10=7$,所以$x=3$。

算上花色的话,总共有40!个排列,这个是不是用程序也不能在短时间里做完?我不懂编程,感觉上这个数挺大的。

48

主题

361

回帖

3034

积分

积分
3034

显示全部楼层

业余的业余 发表于 2022-12-3 12:35
abababa 发表于 2022-12-3 11:59
原来如此,总和等于220,如果能终止的话,那么设和为9,19,29的分别有$n_1,n_2,n_3$组,虽然不知道具体 ...


花色这里无意义,初始状态有

40!/(4!)^10 大约 10^34 量级, 实际状态空间起码在这个数量上再乘100, 这已经超出了计算能力。

但如果我们随机取几十上百万个不同的permutation, 如果都能解,那么可以有一定的把握作出猜测:所有子问题都可解。这就成了有一些价值的一个数学问题。

如果我们找到了一个反例,即无论如何改变同一匹配组的三张牌的顺序,这个子问题都无法得到手中有13个匹配组的状态,那么就说明死局确实存在。NND, 这个子问题本身就成了一个状态空间搜索的问题。这样整个问题的复杂度就更高了。搞得我不敢下手。

比如第232个排列,
1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7
8 8 8 9 10 9 8 9 10 9 10 10

前5百次发牌得到的结果
  1. On hand: 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10
  2. On table: 1
  3. total dealing: 1
  4. On hand: 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10
  5. On table: 1 1
  6. total dealing: 2
  7. On hand: 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10
  8. On table: 1 1 1
  9. total dealing: 3
  10. On hand: 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10
  11. On table: 1 1 1 1
  12. total dealing: 4
  13. On hand: 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10
  14. On table: 1 1 1 1 2
  15. total dealing: 5
  16. On hand: 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10
  17. On table: 1 1 1 1 2 2
  18. total dealing: 6
  19. On hand: 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10
  20. On table: 1 1 1 1 2 2 2
  21. total dealing: 7
  22. On hand: 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10
  23. On table: 1 1 1 1 2 2 2 2
  24. total dealing: 8
  25. On hand: 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10
  26. On table: 1 1 1 1 2 2 2 2 3
  27. total dealing: 9
  28. On hand: 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10
  29. On table: 1 1 1 1 2 2 2 2 3 3
  30. total dealing: 10
  31. On hand: 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3
  32. On table: 1 1 1 1 2 2 2 2
  33. total dealing: 11
  34. On hand: 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3
  35. On table: 1 1 1 1 2 2 2 2 3
  36. total dealing: 12
  37. On hand: 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4
  38. On table: 1 1 1 1 2 2 2
  39. total dealing: 13
  40. On hand: 4 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4
  41. On table: 1 1 1 1 2 2 2 4
  42. total dealing: 14
  43. On hand: 4 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4 1 4 4
  44. On table: 1 1 1 2 2 2
  45. total dealing: 15
  46. On hand: 5 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4 1 4 4
  47. On table: 1 1 1 2 2 2 4
  48. total dealing: 16
  49. On hand: 5 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4 1 4 4
  50. On table: 1 1 1 2 2 2 4 5
  51. total dealing: 17
  52. On hand: 5 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4 1 4 4
  53. On table: 1 1 1 2 2 2 4 5 5
  54. total dealing: 18
  55. On hand: 5 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4 1 4 4
  56. On table: 1 1 1 2 2 2 4 5 5 5
  57. total dealing: 19
  58. On hand: 6 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4 1 4 4
  59. On table: 1 1 1 2 2 2 4 5 5 5 5
  60. total dealing: 20
  61. On hand: 6 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4 1 4 4
  62. On table: 1 1 1 2 2 2 4 5 5 5 5 6
  63. total dealing: 21
  64. On hand: 6 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4 1 4 4
  65. On table: 1 1 1 2 2 2 4 5 5 5 5 6 6
  66. total dealing: 22
  67. On hand: 6 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4 1 4 4
  68. On table: 1 1 1 2 2 2 4 5 5 5 5 6 6 6
  69. total dealing: 23
  70. On hand: 7 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4 1 4 4
  71. On table: 1 1 1 2 2 2 4 5 5 5 5 6 6 6 6
  72. total dealing: 24
  73. On hand: 7 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4 1 4 4 1 1 7
  74. On table: 1 2 2 2 4 5 5 5 5 6 6 6 6
  75. total dealing: 25
  76. On hand: 7 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4 1 4 4 1 1 7 6 6 7
  77. On table: 1 2 2 2 4 5 5 5 5 6 6
  78. total dealing: 26
  79. On hand: 7 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4 1 4 4 1 1 7 6 6 7 6 6 7
  80. On table: 1 2 2 2 4 5 5 5 5
  81. total dealing: 27
  82. On hand: 8 8 8 9 10 9 8 9 10 9 10 10 3 3 3 2 3 4 1 4 4 1 1 7 6 6 7 6 6 7
  83. On table: 1 2 2 2 4 5 5 5 5 7
  84. total dealing: 28
  85. ....
  86. On hand: 4 4 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1
  87. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7
  88. total dealing: 469
  89. On hand: 4 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1
  90. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 4
  91. total dealing: 470
  92. On hand: 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1
  93. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 4 4
  94. total dealing: 471
  95. On hand: 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1
  96. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7
  97. total dealing: 472
  98. On hand: 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1
  99. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 5
  100. total dealing: 473
  101. On hand: 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1
  102. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 5 3
  103. total dealing: 474
  104. On hand: 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1 5 3 1
  105. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7
  106. total dealing: 475
  107. On hand: 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1 5 3 1
  108. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 8
  109. total dealing: 476
  110. On hand: 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1 5 3 1
  111. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 8 9
  112. total dealing: 477
  113. On hand: 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1 5 3 1 8 9 2
  114. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7
  115. total dealing: 478
  116. On hand: 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1 5 3 1 8 9 2
  117. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 7
  118. total dealing: 479
  119. On hand: 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1 5 3 1 8 9 2
  120. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 7 6
  121. total dealing: 480
  122. On hand: 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1 5 3 1 8 9 2 7 6 6
  123. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7
  124. total dealing: 481
  125. On hand: 6 2 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1 5 3 1 8 9 2 7 6 6
  126. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 1
  127. total dealing: 482
  128. On hand: 2 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1 5 3 1 8 9 2 7 6 6
  129. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 1 6
  130. total dealing: 483
  131. On hand: 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1 5 3 1 8 9 2 7 6 6 1 6 2
  132. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7
  133. total dealing: 484
  134. On hand: 7 5 6 9 4 8 8 3 5 3 1 4 4 1 5 3 1 8 9 2 7 6 6 1 6 2
  135. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 7
  136. total dealing: 485
  137. On hand: 5 6 9 4 8 8 3 5 3 1 4 4 1 5 3 1 8 9 2 7 6 6 1 6 2
  138. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 7 7
  139. total dealing: 486
  140. On hand: 6 9 4 8 8 3 5 3 1 4 4 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5
  141. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7
  142. total dealing: 487
  143. On hand: 9 4 8 8 3 5 3 1 4 4 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5
  144. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 6
  145. total dealing: 488
  146. On hand: 4 8 8 3 5 3 1 4 4 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5
  147. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 6 9
  148. total dealing: 489
  149. On hand: 8 8 3 5 3 1 4 4 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4
  150. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7
  151. total dealing: 490
  152. On hand: 8 3 5 3 1 4 4 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4
  153. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 8
  154. total dealing: 491
  155. On hand: 3 5 3 1 4 4 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4
  156. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 8 8
  157. total dealing: 492
  158. On hand: 5 3 1 4 4 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3
  159. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7
  160. total dealing: 493
  161. On hand: 3 1 4 4 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3
  162. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 5
  163. total dealing: 494
  164. On hand: 1 4 4 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3
  165. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 5 3
  166. total dealing: 495
  167. On hand: 4 4 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1
  168. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7
  169. total dealing: 496
  170. On hand: 4 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1
  171. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 4
  172. total dealing: 497
  173. On hand: 1 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1
  174. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 4 4
  175. total dealing: 498
  176. On hand: 5 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1
  177. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7
  178. total dealing: 499
  179. On hand: 3 1 8 9 2 7 6 6 1 6 2 7 7 5 6 9 4 8 8 3 5 3 1 4 4 1
  180. On table: 10 9 8 9 10 3 5 10 2 2 4 10 7 5
  181. total dealing: 500
复制代码


以上用了一些启发性的组内次序调整,但没有穷举。目前的算法解这个问题还是个死循环,当然我并不认为这是个死问题。

我对这个问题的认识还太浅(比刚接触这个问题时深了些),也许有很多等效变换能极大地简化问题。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-12-3 17:14
本帖最后由 abababa 于 2022-12-4 10:17 编辑
业余的业余 发表于 2022-12-3 12:35
花色这里无意义,初始状态有

40!/(4!)^10 大约 10^34 量级, 实际状态空间起码在这个数量上再乘100, 这 ...


请问电脑编程的话,能解多大的数?比如能解$10^{10}$的吗?

48

主题

361

回帖

3034

积分

积分
3034

显示全部楼层

业余的业余 发表于 2022-12-3 19:55
abababa 发表于 2022-12-3 17:14
请问电脑编程的话,能解多大的数?比如能解$10^10$的吗?


$10^{10}$ 肯定没问题。而且这个问题很容易分布并行, 拿10000台电脑,每个只要处理百万级,不说秒杀,应该可以以分钟记吧。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-12-4 10:17
业余的业余 发表于 2022-12-3 19:55
$10^{10}$ 肯定没问题。而且这个问题很容易分布并行, 拿10000台电脑,每个只要处理百万级,不说秒杀,应 ...


我突然想到,能不能根据3楼的那些解,然后弄出所有的可解排列来,如果这个数小于全部的排列,就说明其余的那些排列全都不可解。

413

主题

1558

回帖

1万

积分

积分
11498

显示全部楼层

 楼主| abababa 发表于 2022-12-4 12:12
还有一个方法,但我没证明出来。因为最后的3张一组总共有13组,称每个3张为一个完成组。而每次从牌桌上收回的那些组都是按组连续地排在牌摞里,那么能不能证明,这个连续完成组的个数是严格单调增函数?
当取出一张牌A放在牌桌上时,如果桌面牌能构成一个完成组,且A不来自连续完成组,那么连续完成组的个数就会增加,如果A来自连续完成组,那么就破坏了连续完成组中的一个,但因为同时又收回了一个完成组,所以连续完成组的个数也不减少,但这种情况不能证明它严格增加。

48

主题

361

回帖

3034

积分

积分
3034

显示全部楼层

业余的业余 发表于 2022-12-4 21:18
abababa 发表于 2022-12-4 12:12
还有一个方法,但我没证明出来。因为最后的3张一组总共有13组,称每个3张为一个完成组。而每次从牌桌上收回 ...

不减,但不能(也许说是很难)证明单增。如果能证明单增(或每某个常数n次全旅行后,会有增量,直至得到13个完成组),这个问题就完美的解决了。

17#的方法可以一试,但我不太理解你的程序:) 再一个能否保证3楼所列规则衍生的可解排列是互斥的?也就是说如果某个可解排列如果属于规则1, 那么它不可能归属与任何其他规则之下?

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 15:20

Powered by Discuz!

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