package com.com.linklist;
import static java.lang.Math.sqrt;
public class bisai {
public static void main(String[] args) {
int [][]a=new int[100][100];
int [][]b=new int[100][100];
int temp =8;
int n=8;
int fk=n;
digui(a,n,temp);
shuchu(a,temp);
//迭代方法计算要多少次扩展
int m =0;
while(fk>1)
{
fk=fk/2;
m++;
}
//m是求出一共2的K次方=总共人数的K值
feidigui(b,m);
shuchu(b,n);
}
public static void digui(int [][]a,int n,int temp){
if (n == 2)
{
a[1][1]=1;
a[1][2]=2;
a[2][1]=2;
a[2][2]=1;
}
else{
temp=temp/2;
digui(a,n/2,temp);
//先求左下角
for(int i=temp+1;i<=n;i++)
{
for(int j=1;j<=temp;j++)
{
a[i][j]=a[i-temp][j]+temp;
}
}
//先求右上角
for (int i = 1; i <= temp; i++){
for (int j = temp + 1; j <= n; j++) {
//a[i][j] = a[i + temp][(j + temp) % n];
a[i][j] = a[j][i];
}
}
//求右下角
for(int i=temp+1;i<=n;i++)
{
for(int j=temp+1;j<=n;j++)
{
a[i][j] = a[i - temp][j - temp];
}
}
}
}
public static void feidigui(int [][]b,int k)
{
int n=2;
b[1][1]=1;
b[1][2]=2;
b[2][1]=2;
b[2][2]=1;
for(int t=1;t<=k;t++) {
int temp = n;
n = n * 2;
//左下角
for (int i = 1 + temp; i <= n; i++)
{
for(int j=1;j<=n;j++)
{
b[i][j] = b[i-temp][j]+temp;
}
}
//右上角
for (int i = 1;i <= temp; i++)
{
for(int j=temp+1;j<=n;j++)
{
b[i][j] = b[j][i];
}
}
//右下角
for (int i = 1 + temp; i <= n; i++)
{
for(int j= 1 + temp;j<=n;j++)
{
b[i][j] = b[i-temp][j-temp];
}
}
}
}
public static void shuchu(int [][] a,int N)
{
System.out.printf("选手"+"\t");
for (int i = 1; i <= N-1; i++)
{
System.out.printf("第" +i+"天"+"\t");
}
System.out.println();
for (int i = 1; i <= N; i++)
{
for (int j = 1; j <= N; j++)
System.out.printf(" "+ a[i][j]+" "+"\t"+"\t");
System.out.println();
}
}
}