古詩詞大全網 - 成語查詢 - c語言編程 1-9數 相加 橫豎斜都為15 數不能重復

c語言編程 1-9數 相加 橫豎斜都為15 數不能重復

#include<stdio.h>

#include <stdlib.h>

#include <conio.h>

#include <ctype.h>

int place(int*);

void main(void){/*九宮圖算法*/

int a[9]={1,2,3,4,5,6,7,8,9};

int b[9]={0};/*表示數字的位置狀態*/

int j,k,i;

for(k=0;k<=3;k++){/*對於所有比5小的數*/

b[1]=a[k];/*選壹比5小的數放到第壹行第二列*/

for(j=8;j>=5;j--){/*對於所有比5大的數*/

if(k!=(8-j)){/*不選擇前面已選小數所對應的大數*/

b[0]=a[j];/*選壹比5大的數放到第壹行第壹列*/

if(place(b)){/*若得到壹解,則打印出*/

printf("\n 九宮圖\n\n");

for(i=0;i<=8;i++){

printf(" %d ",b[i]);

if((i+1)%3==0){

printf("\n\n\n");

}

}

getch();

exit(0);

}

} /* 回溯到上壹級*/

} /*回溯到根壹級 */

}

}

int place(int*p){ /*計算出其他位置的數字並檢測是否為所求的解*/

p[2]=15-p[0]-p[1];

p[4]=5;

p[6]=10-p[2];

p[3]=15-p[0]-p[6];

p[5]=10-p[3];

p[7]=10-p[1];

p[8]=10-p[0];

if(p[2]+p[5]+p[8]==p[6]+p[7]+p[8]){/*其他行和列已通過計算檢測了,只有第三行,第三列未檢測*/

return(1);

}

else{

return(0);

}

}