//【习2.19】 循环移位方阵。
//采用一维数组,将数组看成环形。
/*
对于给定的一个数据元素序列,如{0,1,2,3,4},输出如下形式的循环移位方阵:
0 1 2 3 4
1 2 3 4 0
2 3 4 0 1
3 4 0 1 2
4 0 1 2 3
*/
public class Shift
{
public static void main(String args[])
{
int table[] = {0,1,2,3,4}; //{7,4,8,9,1,5};
System.out.println("左移:");
for (int i=0;i<table.length;i++)
{
for (int j=0;j<table.length;j++)
System.out.print(table[(i+j)%table.length]+" ");
System.out.println();
}
System.out.println("\n左移:");
for (int i=0;i<table.length;i++)
{
int j=i;
do
{
System.out.print(table[j]+" ");
j=(j+1)%table.length;
}while (j!=i);
System.out.println();
}
System.out.println("\n右移方案一:");
for (int i=table.length-1;i>=0;i--)
{
int j=i;
do
{
System.out.print(table[j]+" ");
j=(j+1)%table.length;
}while (j!=i);
System.out.println();
}
System.out.println("\n右移方案二:");
int i=0;
do
{
int j=i;
do
{
System.out.print(table[j]+" ");
j=(j+1)%table.length;
}while (j!=i);
System.out.println();
i=(i-1+table.length)%table.length;
}while(i!=0);
}
}
/*
程序运行结果如下:
左移:
0 1 2 3 4
1 2 3 4 0
2 3 4 0 1
3 4 0 1 2
4 0 1 2 3
左移:
0 1 2 3 4
1 2 3 4 0
2 3 4 0 1
3 4 0 1 2
4 0 1 2 3
右移方案一:
4 0 1 2 3
3 4 0 1 2
2 3 4 0 1
1 2 3 4 0
0 1 2 3 4
右移方案二:
0 1 2 3 4
4 0 1 2 3
3 4 0 1 2
2 3 4 0 1
1 2 3 4 0
左移:
7 4 8 9 1 5
4 8 9 1 5 7
8 9 1 5 7 4
9 1 5 7 4 8
1 5 7 4 8 9
5 7 4 8 9 1
右移方案一:
5 7 4 8 9 1
1 5 7 4 8 9
9 1 5 7 4 8
8 9 1 5 7 4
4 8 9 1 5 7
7 4 8 9 1 5
右移方案二:
7 4 8 9 1 5
5 7 4 8 9 1
1 5 7 4 8 9
9 1 5 7 4 8
8 9 1 5 7 4
4 8 9 1 5 7
*/