然後分析這個問題,可以理解為12的數字沒有重復排列,然後要求(以下數字為數字)1+2+3 = 3+4+5 = 5+6+7 = 7+8+9 = 9+10+166。
雖然圖形是六邊形,但是拉成直線就是壹維數組。
根據排列組合,12的數應該是12!(不算多少錢。超級大。)
所以解決方案如下:
我不會寫全部代碼,而是寫壹個關鍵部分,自己完成,有利於提高。
int a[12];//存儲12的排列數。
//該函數用於判斷12的排列是否符合要求。
bool IsOK(int* a)
{
int b;
b = a[0]+a[1]+a[2];
if(a[2]+a[3]+a[4]= = b & amp;& amp
a[4]+a[5]+a[6]= = b & amp;& amp
a[6]+a[7]+a[8]= = b & amp;& amp
a[8]+a[9]+a[10]= = b & amp;& amp
a[10]+a[11]+a[0]= = b)
{
返回true
}
其他
{
返回false
}
}
//生成隨機排列(算法還在寫。這是最復雜的部分。妳自己想想吧。完成後我會重新發行)
void create com();
int main()
{
while(1)
{
create com();
if(IsOk(a))
{
//打印
}
}
}
生成排列的算法很長。我告訴妳這個想法。妳可以自己體會。
題目:實現n個數的不重復排列
使用遞歸
設實現方法為f(n),則f(n)與f(n-1)的關系為
對於f(n-1),a1,a2的每個組合...,an-1。
在每個缺口分別插入n,這樣就多了n種排列。
n,a1,a2,...,an-1
a1,n,a2,...,an-1
a1,a2,n....,an-1
.....
a1,a2,......an-1,n
C語言使用難點:C語言沒有容器!如果想用純C語言,需要自己寫容器算法(我自己寫的,用鏈表實現)。如果會用C++,可以用C++容器來實現。
我寫了幾千行代碼來實現它。