算法描述:
设有n=2的k次个运动员要进行网球比赛,现在要设计一个满足一下要求的比赛日程表:
- 每个选手必须要与其他n-1个选手各赛一次
- 每个选手一天只能赛一次
- 循环赛一共进行n-1天 日程表
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
2 | 1 | 4 | 3 | 6 | 5 | 8 | 7 |
3 | 4 | 1 | 2 | 7 | 8 | 5 | 6 |
4 | 3 | 2 | 1 | 8 | 7 | 6 | 5 |
5 | 6 | 7 | 8 | 1 | 2 | 3 | 4 |
6 | 5 | 8 | 7 | 2 | 1 | 4 | 3 |
7 | 8 | 5 | 6 | 3 | 4 | 1 | 2 |
8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 |
- 代码如下:
package keshe;
import java.awt.BorderLayout;
import java.awt.Container;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.table.DefaultTableModel;
public class Form {
private static int array[][];
private Container getContent;
public Form() {
array = new int[8][8];
for (int i = 0; i < 8; i++)
array[i][0] = i + 1;
}
public Form(int n) {
array = new int[n][n];
for (int i = 0; i < n; i++)
array[i][0] = i + 1;
}
/*
* a代表待求矩阵行的起始下标,b代表待求矩阵行的终止下标,下同 i代表待求矩阵列的起始下标,j代表待求矩阵列的终止下标,下同
*/
public void schedule(int a, int b, int i, int j) {
if (i < j) {
schedule(a, (int) (a + b - 1) / 2, i, (int) (j + i - 1) / 2);
schedule((int) (a + b + 1) / 2, b, i, (int) (j + i - 1) / 2);
merge(a, (int) (a + b - 1) / 2, i, (int) (j + i - 1) / 2, "top");
merge((int) (a + b + 1) / 2, b, i, (int) (j + i - 1) / 2, "bottom");
}
}
public void merge(int a, int b, int i, int j, String s) {
int lenth = b - a + 1;
if (s.equals("top")) {
for (int p = a; p <= b; p++) {
for (int q = i; q <= j; q++)
array[p + lenth][q + lenth] = array[p][q];
}
} else if (s.equals("bottom")) {
for (int p = a; p <= b; p++) {
for (int q = i; q <= j; q++)
array[p - lenth][q + lenth] = array[p][q];
}
}
}
private static Container getContentPane() {
// TODO 自动生成的方法存根
return null;
}
public static void main(String[] args) {
Form obj = new Form();
obj.schedule(0, 7, 0, 7);
String s=JOptionPane.showInputDialog(null,"请输入选手个数(个数为2的n次方)");
int n=Integer.parseInt(s);
String[] columnNames=new String[n];
for(int w=0;w<columnNames.length;w++) {
String ss="第"+(w+1)+"天";
columnNames[w]=ss;
}
String[][] data =new String[n][n] ;
JTable table=null;
JFrame f=new JFrame();
DefaultTableModel defaultTableModel=null;
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[i].length; j++)
data[i][j]=String.valueOf(array[i][j]);
}
defaultTableModel=new DefaultTableModel(data,columnNames);
table=new JTable(defaultTableModel);
JScrollPane p=new JScrollPane(table);
Container contentPane=f.getContentPane();
contentPane.add(p, BorderLayout.CENTER);
f.setSize(500,500);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
最后的输出用的是Jtable表格输出,运行截图如下: