祝大家五一快乐!

        今天是五一劳动节啊。首先向所有的劳动人问好,祝大家节日快乐。

        意林的杂志最后几页上有数独的数学游戏,今天我也凑个热闹写了一个代码来算答案,因为程序比较小,没写注释。请高手帮着看看。

 

#include < iostream >
using  namespaces std;
 
int  a[ 10 ][ 10 ];
ing b[
9 ],c[ 9 ];
 
int  p = 0 ;
int  m = 0 ,n = 0 ;
int  x1 = 1 ,y1 = 1 ,box1 = 1 ;
 
void  start();
void  scanx( int )
void  scany( int );
void  scanbox( int );
 
void  refusebc();
int  check();
int  take();
int  make();
 
void   out ();
 
int  main() {
  start();
  
set();
  
return 0;
}

 
 
// ----------------------------------------------------
 
void  start() {
  
int x,y;
  a[][]
={0};
  b[]
={0};
  
for(;n=0;){
    cout
<<"inputer x,y:"
    cin
>>x>>y;
    cout
<<"inputer n:"
    cin
>>n;
    a[x][y]
=n;
}

 
 
//---------------------------------------------------
 
void out(){
  
for(int i=1;i<=9;i++){
    
for(int j=1;j<=9;j++){
      cout
<<a[i][j]<<" "
    }

    cout
<<endl;
  }

}

 
 
//--------------------------------------------------
 
void refusebc(){
  b[]
={0};
  c[]
={0};
}

 
//----------------------------------------------------
 
 
void scanx(int x){
  
int k=1;
  
for(int i=1;i<=9:i++){
    n
=a[i][x];
    
for(int z=0;z<=p;z++){
      
if(n==0||b[z]==n)
        k
=0;
      }

      
if(k=0){
        b[p]
=n;
        p
++;
      }

    }

  }

}

 
 
// --------------------------------------
 
 
void  scany( int  y) {
   
int k=1;
  
for(int i=1;i<=9:i++){
    n
=a[y][i];
    
for(int z=0;z<=p;z++){
      
if(n==0||b[z]==n)
        k
=0;
      }

      
if(k=0){
        b[p]
=n;
        p
++;
      }

    }

  }

}
 
// --------------------------------------
 
 
void  scanbox( int  box) {
  
if(box>1&&box<=3){
    
for(int i=1;i<=3;i++:{
      
for(int j=1;j<=3;j++){
        n
=a[i][3(box-1)+j];
        
for(int z=0;z<=p;z++){
          
if(n==0||b[z]==n)
            k
=0;
          }

      
if(k=0){
        b[p]
=n;
        p
++;
      }

    }

  }

 
if(box>4&&box<=6)
    
for(int i=1;i<=3;i++:{
      
for(int j=1;j<=3;j++){
        n
=a[i+3][3(box-4)+j];
        
for(int z=0;z<=p;z++){
          
if(n==0||b[z]==n)
            k
=0;
          }

      
if(k=0){
        b[p]
=n;
        p
++;
      }

    }

  }

 
if(box>7&&box<=9)
    
for(int i=1;i<=3;i++:{
      
for(int j=1;j<=3;j++){
        n
=a[i+6][3(box-7)+j];
        
for(int z=0;z<=p;z++){
          
if(n=0||b[z]=n)
            k
=0;
          }

      
if(k=0){
        b[p]
=n;
        p
++;
      }

    }

  }

 
}

 
 
//---------------------------
 
void make(){
  refusebc();
  scanx(x1);
  scany(y1);
  scanbox(box1);
  
for(int i=0;i<=8;i++){
     c[i]
=i+1;
  }

  
for(int i=0;i<=8;i++){
    n
=b[i];
    
if(!n=0){
      c[n
-i]=0;
    }

  }

}

 
 
//-----------------------------------------
 
 
 
int take(){
  make();
  
for(int i=m;i<=8;i++){
    
if(!c[i]==0){
      m
=i;
      
return c[i];
      
break;
    }

  }

}

 
 
//-----------------------------
 
int check(){
  
for(int i=1;i<=3;i++0{
    
if(y1>=(3(i-1)+1)&&y1<=(3(i-1)+3)){
      
if(x1<=1&&x1<=3)  box1=3(i-1)+1;
      
if(x1<=4&&x1<=6)box1=3(i-1)+2;
      
if(x1<=7&&x1<=9)  box1=3(i-1)+3;
    }

  }

  
for(int i=1;i<=9;i++){
    
for(int j=1;j<=9;j++){
      
if(a[i][j]=0)  return 0;
    }

  }

  
return 1;
}

 
 
//------------------------------------
 
 
 
int set(){
  
int x,y;
  
if(check()==0){
    
if(a[x1][y1]=0){
      x
=x1;
      y
=y1;
      a[x][y]
=take();
    }

    
if(x1=9)
       y1
++;
    
else
       x1
++;
  }

  
set();
  
if(icheck==0){
     
out();
     
return 0;
  }

   a[x][y]
=0;
   x1
=x;
   y1
=y;
}
  
      
 
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值