//  https://v.JTdQ2So/ 矗接觀看视频!
#include<stdio.h>

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

int isok(int n)//分析A[]第N个数与前面的数比较为递归 作准备。 
{
    int flag=1,i;
   
    for(i=0;i<n;i++){
      if(A[n]==A[i])  flag=0;//不与前面已选择的数相同 
       }
  
   if(n==5 && A[4]!=5)  flag=0 ;
    if(n==3 && A[0]+A[1]+A[2]!=15)
      flag=0; 
    if(n==6 && A[5]+A[4]+A[3]!=15 ) flag=0;
    
   if(n==7 && A[0]+A[3]+A[6]!=15)
     flag=0;
   if(n==7 && A[2]+A[4] +A[6]!=15) 
       flag=0;
   if(n==8 && A[1]+A[4]+A[7]!=15)
     flag=0;
    return flag;
}


void output()
{
     int i;
     for(i=0; i<9;i++){
       printf("%2d",A[i]);
       if(i%3==2) printf("\n");
      }
     printf("----------\n");
    
  }
 

 void add_ok(int n)
 {
      int j;
      if(n==9)
   {
       output();
       return ;
   }
    
       for(j=0;j<9;j++)
      {
        A[n]=a[j];
        if(isok(n) ) add_ok(n+1);
      }
  }
 
  
  int main()
  {
      add_ok(0);
      return 0;
  }