分治策略:循环赛日程表问题
2015-01-11 16:06
489 查看
J***A实现:
package suanfa.fenzhi; import java.util.Scanner; public class CircleTable { /** * @param args */ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); CircleTable table = new CircleTable(n); table.show(); } private int[][] circleTable = null; public CircleTable(int n){ circleTable = new int ; circleTable[0][0] = 1; if(n>=2){ circleTable[1][0] = 2; this.circle(n); } } private void circle(int i) { if(i==2){ circleTable[0][i-1] = circleTable[i-1][0]; circleTable[i-1][i-1] = circleTable[0][0]; }else{ circle(i/2); for (int j1 = i/2; j1 <i ; j1++) { for (int j2 = 0; j2 < i/2; j2++) { circleTable[j1][j2] = circleTable[j1-i/2][j2]+i/2; } } for (int j1 = 0; j1 < i/2; j1++) { for (int j2 = i/2; j2 < i; j2++) { circleTable[j1][j2] = circleTable[j1+i/2][j2-i/2]; } } for (int j1 = i/2; j1 < i; j1++) { for (int j2 = i/2; j2 < i; j2++) { circleTable[j1][j2] = circleTable[j1-i/2][j2-i/2]; } } } } public void show(){ System.out.print("选手\t"); for (int i = 1; i < circleTable.length; i++) { System.out.print("第"+i+"天\t"); } System.out.println(); for (int i = 0; i < circleTable.length; i++) { for (int j = 0; j < circleTable.length; j++) { System.out.print(circleTable[i][j]+"\t"); } System.out.println(); } } }
拓展阅读:如何判断用户输入的数是2的幂
其它:非分治法实现:
package suanfa.fenzhi; import java.util.Scanner; public class CircleTable { /** * @param args */ public static void main(String[] args) { Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); CircleTable table = new CircleTable(n); table.show(); } private int[][] circleTable = null; public CircleTable(int n){ circleTable = new int ; for (int i = 0; i < n; i++) { for (int j = 0; j < i; j++) { circleTable[i][j] = n-i+j+1; } for (int j = i; j < n; j++) { circleTable[i][j] = j-i+1; } } } public void show(){ System.out.print("选手\t"); for (int i = 1; i < circleTable.length; i++) { System.out.print("第"+i+"天\t"); } System.out.println(); for (int i = 0; i < circleTable.length; i++) { for (int j = 0; j < circleTable.length; j++) { System.out.print(circleTable[i][j]+"\t"); } System.out.println(); } } }
相关文章推荐
- 递归与分治策略——集合划分问题,众数问题
- 分治策略之棋盘覆盖问题(ChessBoard)
- 分治策略算法之最大字数组和问题
- 循环赛日程表问题
- 循环赛日程表问题
- 解决问题:分治策略
- 二分法查找和快速排序 二分法是分治算法的一种特殊形式,利用分治策略求解时,所需时间取决于分解后子问题的个数、子问题的规模大小等因素,而二分法,由于其划分的简单和均匀的特点,是查找数据时经常采用的一种有
- 分治法:循环赛日程表问题
- 算法导论:分治策略__最大子数组问题
- 分治与递归——循环赛日程表
- 循环赛日程表问题
- 算法导论C语言实现: 分治策略 -- 最大子数组问题
- 循环赛日程表问题
- 分治法:循环赛日程表问题
- 第四章 分治策略 4.1 最大子数组问题 (暴力求解算法)
- 分治策略 求两同长数组的中位数问题
- 循环日程表 问题(递归分治)
- 循环赛日程表问题
- Java语言描述:递归与分治策略之全排列问题
- 分治策略之最大子数组问题