User: axuhongbo 数独生成器
Time: 2019-08-02 13:42:38
package sudo;

import java.util.Random;
import java.util.Scanner;

class Rand_Class{
	
   //public:
   int rand_seed;
   int Rand_range(int l,int r) {
	 Random t1 = new Random(rand_seed); 
	 int tt = t1.nextInt(r-l+1)+l;
	 rand_seed = (rand_seed*rand_seed+7)%10000;
	 return tt;
   }
}
class Martix{
	int[][] Mar = {{1,4,5,3,2,7,6,9,8},{8,3,9,6,5,4,1,2,7},{
		6,7,2,9,1,8,5,4,3
	},{4,9,6,1,8,5,3,7,2},{
		2,1,8,4,7,3,9,5,6
	},{7,5,3,2,9,6,4,8,1},{
		3,6,7,5,4,2,8,1,9
	},{
		9,8,4,7,6,1,2,3,5
	},{
		5,2,1,8,3,9,7,6,4
	}}; 
	int Seed;
	//new int[50][50];
	final int Size = 9;
	void change_value(int row,int col) {
		for(int i=0;i<Size;i++) {
			for(int j=0;j<Size;j++) {
				
				if(Mar[i][j]==row) {
					Mar[i][j] = col;
				}
				else if(Mar[i][j]==col) {
					Mar[i][j] = row;
				}
				
			}
		}
	}
	private void Swap(int i, int j) {
		// TODO Auto-generated method stub
		int t  = i;
		i = j;
		j =  t;
	}
	void swap_row_base(int L,int R) {
		for(int i=0;i<9;i++) {
			int t  = Mar[L][i];
			Mar[L][i] = Mar[R][i];
			Mar[R][i] =  t;
//			Swap(,);
		}
	}
	void swap_col_base(int L,int R) {
		for(int i=0;i<9;i++) {
			int t  = Mar[i][L];
			Mar[i][L] = Mar[i][R];
			Mar[i][R] =  t;
//			Swap(,);
		}
	}
	void swap_row(int L,int R) {
		for(int i=0;i<3;i++) {
		   swap_row_base(L+i,R+i);
		}
	}
	void swap_col(int L,int R) {
		for(int i=0;i<3;i++) {
			 swap_col_base(L+i,R+i);
		}
	}
	void init() {
		Rand_Class pp = new Rand_Class();
		for(int i=0;i<Seed%20+6;i++) {
			int h = pp.Rand_range(1,9);
			int hh = pp.Rand_range(1,9);
			change_value(h,hh);
		}
		for(int k=0;k<Seed%10;k++) {
			int base = 3*pp.Rand_range(0,2);
			int i = base+pp.Rand_range(0,2);
			int j = base+pp.Rand_range(0,2);
			if(i!=j)
				swap_row_base(i,j);
			i = pp.Rand_range(0,2);
			j = pp.Rand_range(0,2);
			if(i!=j)
				swap_row(3*i,3*j);
			
			base = 3*pp.Rand_range(0,2);
			i = base+pp.Rand_range(0,2);
		   j = base+pp.Rand_range(0,2);
				if(i!=j)
					swap_col_base(i,j);
			i = pp.Rand_range(0,2);
			j = pp.Rand_range(0,2);
			if(i!=j)
				swap_col(3*i,3*j);
			
		}
	}
	void show() {
	   
		int[] book = new int [200];
		int Seedt  = Seed;
		for(int i=0;i<9;i++)
		{
			int top =1;
			for(int j=0;j<9;j++) {
				if(top==1)top  =0;
				else 
				System.out.printf(" ");
				int sum = 3*(i/3)+j/3;
				int p;
				if(Seed%2==0)p = 3;
				else p = 4;
				
				if(book[sum]<p&&Seedt%2==0) {
					book[sum]++;
					System.out.print(Mar[i][j]);    
				}
				else System.out.print("*");
				Seedt++;
			}
			System.out.println("");
		}
	}
	void show2() {
		for(int i=0;i<9;i++) {
			int top  = 1;
			for(int j=0;j<9;j++) {
				if(top==1)top =0;
				else 
				System.out.printf(" ");
				System.out.print(Mar[i][j]);
			}
			System.out.println("");
		}
	}
}

public class Main {
	static int seed = 19;
	public static void main(String[] args){
		

        Scanner sc = new Scanner(System.in);
        seed = sc.nextInt(); 
        
		
		Rand_Class r1 = new Rand_Class();
		r1.rand_seed = 10;
	    Martix gg = new Martix();
	    gg.Seed = seed;
	    gg.init();
	    gg.show2();
	    System.out.println("\n");
	    gg.show();
		
//		for(int i=1;i<=100;i++) {
//			System.out.println(r1.Rand_range(5, 10));
//		}
	}
}