19个整数在六边形中的排列问题

之前有位同事跟我打赌,给我一周时间让我算一道题,算出来赏50块钱.题目如下:
 把数1到19分别填到下面的O中,使每个横行、斜行的数加起来都等于38
      O  O  O 
    O  O  O  O  
  O  O  O  O  O 
    O  O  O  O  
      O  O  O
我高兴的答应了,在开始三天时刻想着这个问题,还拿个本子画来画去.没有结果,我想到编程解决它.但我不会.于是叫个朋友帮我写了个程序.它是用C写的(怎么写的我不清楚,那时对编程通了六窍,^_^),然后告诉我,用现在的PC算要算很久.运行了几个小时,果然没有结果.一周过去了,我输了...
这段时间在学C#,想到那个问题,自己的写了一个,很快算出了结果(我想当时那朋友没有认真对待分析,我分析了一下,得到很多条件,这样电脑就不用那么累了~~),有12种组合.观察了一下,其实只有一种.其它都这个是组合镜像与旋转得来的(难不得最初做这题的人用了近50年的时间,不过他还少个条件,不知道和是多少):
    3 19 16
  17 7 2 12
 18 1 5 4 10
  11 6 8 13
    9 14 15
程序写得不怎么样,也拿出来晾晾吧,请大虾米指教一二!
using  System;
using  System.Collections.Generic;
using  System.Text;

/// <summary>
///  把数1到19分别填到下面的O中,是得没个横行、斜行(包括左右斜行)的数加起来都等于38
///     O  O  O  
///    O  O  O  O   
///   O  O  O  O  O  
///    O  O  O  O   
///      O  O  O 
///  RL的编的第一个算法程序
/// </summary>


class  _19Sum38
{
    
public static void Main()
    
{

///     aO  a1  bO   
///    f1  x1  x2  b1  
///   fO  z2  z0  y1  cO
///    e1  z1  y2  c1 
///      eO  d1  dO 


        
//先算六条边上的组合  3个数6个组
        
//int a0, a1, b0, b1, c0, c1, d0, d1, e0, e1, f0, f1;
        
//算三条对角线的组合 5个数3个组
        
// z0(中心点)
        
// a0, x1, y2, d0,
        
// b0, x2, z1, e0,
        
// c0, y1, z2, f0;
        
//算三条对角线的组合 4个数6个组
        
// a1, x2, y1, c1,
        
// b1, y1, y2, d1,
        
// c1, y2, z1, e1;
        
// d1, z1, z2, f1,
        
// e1, z2, x1, a1;
        
// f1, x1, x2, b1,

        
int count = 0;
        
try
        
{
            Console.WriteLine(
"题目:  把数1到19分别填到下面的O中,是得没个横行、斜行(包括左右斜行)的数加起来都等于38  " +
   
"///     O  O  O    " +
   
"///    O  O  O  O    " +
   
"///   O  O  O  O  O  " +
   
"///    O  O  O  O   " +
   
"///      O  O  O   " +
   
"///             " +
   
"///             ///     aO  a1  bO      " +
   
"///             ///    f1  x1  x2  b1     " +
   
"///             ///   fO  z2  z0  y1  cO    " +
   
"///             ///    e1  z1  y2  c1     " +
   
"///             ///      eO  d1  dO     " +
                    
   
"开始运算:");
            
for (int a0 = 19; a0 > 0; a0--)
            
{
                
for (int a1 = 19; a1 > 0; a1--)
                
{
                    
if (a1 != a0)
                    
{
                        
for (int b0 = 19; b0 > 0; b0--)
                        
{
                            
if ((a0 + a1 + b0 == 38&& b0 != a0 && b0 != a1 )
                            
{
                                
for (int b1 = 19; b1 > 0; b1--)
                                
{
                                    
if (b1 != a0 && b1 != a1 && b1 != b0)
                                    
{
                                        
for (int c0 = 19; c0 > 0; c0--)
                                        
{
                                            
if ((b0 + b1 + c0 == 38&& (c0 != a0 && c0 != a1 && c0 != b0 && c0 != b1))
                                            
{
                                                
for (int c1 = 19; c1 > 0; c1--)
                                                
{
                                                    
if (c1 != a0 && c1 != a1 && c1 != b0 && c1 != b1 && c1 != c0)
                                                    
{
                                                        
for (int d0 = 19; d0 > 0; d0--)
                                                        
{
                                                            
if ((c0 + c1 + d0 == 38&& (d0 != a0 && d0 != a1 && d0 != b0 && d0 != b1 && d0 != c0 && d0 != c1))
                                                            
{
                                                                
for (int d1 = 19; d1 > 0; d1--)
                                                                
{
                                                                    
if (d1 != a0 && d1 != a1 && d1 != b0 && d1 != b1 && d1 != c0 && d1 != c1 && d1 != d0)
                                                                    
{
                                                                        
for (int e0 = 19; e0 > 0; e0--)
                                                                        
{
                                                                            
if ((d0 + d1 + e0 == 38&& (e0 != a0 && e0 != a1 && e0 != b0 && e0 != b1 && e0 != c0 && e0 != c1 && e0 != d0 && e0 != d1))
                                                                            
{
                                                                                
for (int e1 = 19; e1 > 0; e1--)
                                                                                
{
                                                                                    
if (e1 != a0 && e1 != a1 && e1 != b0 && e1 != b1 && e1 != c0 && e1 != c1 && e1 != d0 && e1 != d1 && e1 != e0)
                                                                                    
{
                                                                                        
for (int f0 = 19; f0 > 0; f0--)
                                                                                        
{
                                                                                            
if ((e0 + e1 + f0 == 38&& (f0 != a0 && f0 != a1 && f0 != b0 && f0 != b1 && f0 != c0 && f0 != c1 && f0 != d0 && f0 != d1 && f0 != e0 && f0 != e1)  
                                                                                                )
                                                                                            
{
                                                                                                
for (int f1 = 19; f1 > 0; f1--)
                                                                                                
{
                                                                                                    
if (f1 != a0 && f1 != a1 && f1 != b0 && f1 != b1 && f1 != c0 && f1 != c1 && f1 != d0 && f1 != d1 && f1 != e0 && f1 != e1 && f1 != f0)
                                                                                                    
{
                                                                                                        
if ((f0 + f1 + a0 == 38&& (2 * a0 + a1 + 2 * b0 + b1 + 2 * c0 + c1 + 2 * d0 + d1 + 2 * e0 + e1 + 2 * f0 + f1 == 38 * 6))
                                                                                                        
{
                                                                                                            
for (int z0 = 1; z0 <= 19; z0++)
                                                                                                            
{//中心
                                                                                                                if (z0 != a0 && z0 != a1 && z0 != b0 && z0 != b1 && z0 != c0 && z0 != c1 && z0 != d0 && z0 != d1 && z0 != e0 && z0 != e1 && z0 != f0 && z0 != f1)
                                                                                                                
{
                                                                                                                    
for (int x1 = 1; x1 <= 19; x1++)
                                                                                                                    
{
                                                                                                                        
if (x1 != a0 && x1 != a1 && x1 != b0 && x1 != b1 && x1 != c0 && x1 != c1 && x1 != d0 && x1 != d1 && x1 != e0 && x1 != e1 && x1 != f0 && x1 != f1 && x1 != z0)
                                                                                                                        
{
                                                                                                                            
for (int y2 = 1; y2 <= 19; y2++)
                                                                                                                            
{
                                                                                                                                
if ((y2 != a0 && y2 != a1 && y2 != b0 && y2 != b1 && y2 != c0 && y2 != c1 && y2 != d0 && y2 != d1 && y2 != e0 && y2 != e1 && y2 != f0 && y2 != f1 && y2 != z0 && y2 != x1) && (a0 + x1 + y2 + d0 + z0 == 38))//对角线一
                                                                                                                                {
                                                                                                                                    
for (int y1 = 1; y1 <= 19; y1++)
                                                                                                                                    
{
                                                                                                                                        
if (y1 != a0 && y1 != a1 && y1 != b0 && y1 != b1 && y1 != c0 && y1 != c1 && y1 != d0 && y1 != d1 && y1 != e0 && y1 != e1 && y1 != f0 && y1 != f1 && y1 != z0 && y1 != x1 && y1 != y2)
                                                                                                                                        
{
                                                                                                                                            
for (int z2 = 1; z2 <= 19; z2++)
                                                                                                                                            
{
                                                                                                                                                
if ((z2 != a0 && z2 != a1 && z2 != b0 && z2 != b1 && z2 != c0 && z2 != c1 && z2 != d0 && z2 != d1 && z2 != e0 && z2 != e1 && z2 != f0 && z2 != f1 && z2 != z0 && z2 != x1 && z2 != y2 && z2 != y1) && (c0 + y1 + z2 + f0 + z0 == 38))//对角线二
                                                                                                                                                {
                                                                                                                                                    
for (int x2 = 1; x2 <= 19; x2++)
                                                                                                                                                    
{
                                                                                                                                                        
if (x2 != a0 && x2 != a1 && x2 != b0 && x2 != b1 && x2 != c0 && x2 != c1 && x2 != d0 && x2 != d1 && x2 != e0 && x2 != e1 && x2 != f0 && x2 != f1 && x2 != z0 && x2 != x1 && x2 != y2 && x2 != y1 && x2 != z2)
                                                                                                                                                        
{
                                                                                                                                                            
for (int z1 = 1; z1 <= 19; z1++)
                                                                                                                                                            
{
                                                                                                                                                                
if ((z1 != a0 && z1 != a1 && z1 != b0 && z1 != b1 && z1 != c0 && z1 != c1 && z1 != d0 && z1 != d1 && z1 != e0 && z1 != e1 && z1 != f0 && z1 != f1 && z1 != z0 && z1 != x1 && z1 != y2 && z1 != y1 && z1 != z2 && z1 != x2) && (b0 + x2 + z1 + e0 + z0 == 38)//对角线三
&& (a1 + x2 + y1 + c1 == 38&& (b1 + y1 + y2 + d1 == 38&& (c1 + y2 + z1 + e1 == 38&& (d1 + z1 + z2 + f1 == 38&& (e1 + z2 + x1 + a1 == 38&& (f1 + x1 + x2 + b1 == 38))//内三角的边
                                                                                                                                                                {count++; Console.WriteLine("这是第" + count + "种组合:"); 
                                                                                                                                                                    Console.Write(
"   "+a0.ToString()); Console.Write(" "+a1.ToString()); Console.Write(" "+b0.ToString()+" ");
                                                                                                                                                                    Console.Write(
"  "+f1.ToString()); Console.Write(" "+x1.ToString()); Console.Write(" "+x2.ToString()); Console.Write(" "+b1.ToString()+" ");
                                                                                                                                                                    Console.Write(
" "+f0.ToString());Console.Write(" "+z2.ToString()); Console.Write(" "+z0.ToString()); Console.Write(" "+y1.ToString()); Console.Write(" "+c0.ToString()+" ");
                                                                                                                                                                    Console.Write(
"  "+e1.ToString()); Console.Write(" "+z1.ToString()); Console.Write(" "+y2.ToString()); Console.Write(" "+c1.ToString()+" ");
                                                                                                                                                                    Console.Write(
"   "+e0.ToString()); Console.Write(" "+d1.ToString()); Console.Write(" "+d0.ToString()+" ");
                                                                                                                                                                    Console.WriteLine(
"==================="); }
 else   
                                                                                                                                                                    
continue;
                                                                                                                                                            }

                                                                                                                                                        }

                                                                                                                                                        
else continue;
                                                                                                                                                    }

                                                                                                                                                }

                                                                                                                                                
else continue;
                                                                                                                                            }

                                                                                                                                        }

                                                                                                                                        
else continue;
                                                                                                                                    }

                                                                                                                                }

                                                                                                                                
else continue;
                                                                                                                            }

                                                                                                                        }

                                                                                                                        
else continue;
                                                                                                                    }

                                                                                                                }

                                                                                                                
else continue;
                                                                                                            }

                                                                                                        }

                                                                                                        
else continue;
                                                                                                    }

                                                                                                    
else continue;
                                                                                                }

                                                                                            }

                                                                                            
else continue;
                                                                                        }

                                                                                    }

                                                                                    
else continue;
                                                                                }

                                                                            }

                                                                            
else continue;
                                                                        }

                                                                    }

                                                                    
else continue;
                                                                }

                                                            }

                                                            
else continue;
                                                        }

                                                    }

                                                    
else continue;
                                                }

                                            }

                                            
else
                                                
continue;
                                        }

                                    }

                                    
else
                                        
continue;
                                }


                            }

                            
else
                                
continue;
                        }

                    }

                    
else
                        
continue;
                }

            }

        }

        
catch (Exception ex)
        
{
            Console.WriteLine(ex.Message);
        }

    }

}

 哪位朋友写个不知道和的具体数值的?

顺便请教更好的算法,谢谢!

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值