當前位置:編程學習大全網 - 編程語言 - 算術規劃問題

算術規劃問題

更系統的方法是:

每個字母設置兩種狀態,已知和未知。

進行回溯性搜索。從單位搜索開始,從0到9搜索等式左邊的T和Q,並且將T和Q的狀態設置為已知。這時候妳可以通過搜索e的值很快得到結果,也可以設置為已知。然後搜索十位數。此時已知t的值,搜索未知字母。此外,G+N+N=T是下壹級搜索的條件(如果壹個數字有進位,等式左邊要加1),矛盾的情況就消除了。以此類推,搜索幾百,幾千,因為後面,所以搜索速度會快很多。這是壹個DFS。

閑著無聊,寫了個程序。結果排序為999219919。

# include & ltstdio.h & gt

# include & ltstring.h & gt

int f[6][9];//存儲原始方程

int r[9];//結果

char k[9];//已知?

Int find(int level,int j,int c/*進位*/)

{

如果(級別== 6)

返回1;

如果(j == 9)

{

int t = c;

for(int I = 0;我& lt9;++i)

t+= r[I]* f[level][I];

if(t % 10!= 0)

返回0;

返回find(level + 1,0,t/10);

}

如果(!k[j]& amp;& ampf[級別][j])

{

k[j]= 1;

for(int I = 9;我& gt= 0;-我)

{

r[j]= I;

if(find(level,j+1,c))

返回1;

}

k[j]= 0;

返回0;

}

其他

{

返回find(level,j+1,c);

}

}

int main()

{

memset(f,0,sizeof(f));

memset(r,0,sizeof(r));

memset(k,0,sizeof(k));

//按照vingtcqre的順序

f[0][4]= 1;

f[0][6]= 2;

f[0][8]=-1;

f[1][3]= 1;

f[1][2]= 2;

f[1][4]=-1;

f[2][1]= 2;

f[3][1]= 1;

f[3][5]= 2;

f[3][8]=-1;

f[4][0]= 1;

f[4][7]=-1;

f[5][4]=-1;

find(0,0,0);

//此時結果按照R中vingtcqre的順序保存..

返回0;

}

  • 上一篇:接近開關接線的原理是接近開關的接線功能。
  • 下一篇:線圈匝數的計算
  • copyright 2024編程學習大全網