Javaswt实现分治法循环赛日程表论文

上传人:飞*** 文档编号:50964436 上传时间:2018-08-11 格式:PDF 页数:16 大小:396.64KB
返回 下载 相关 举报
Javaswt实现分治法循环赛日程表论文_第1页
第1页 / 共16页
Javaswt实现分治法循环赛日程表论文_第2页
第2页 / 共16页
Javaswt实现分治法循环赛日程表论文_第3页
第3页 / 共16页
Javaswt实现分治法循环赛日程表论文_第4页
第4页 / 共16页
Javaswt实现分治法循环赛日程表论文_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《Javaswt实现分治法循环赛日程表论文》由会员分享,可在线阅读,更多相关《Javaswt实现分治法循环赛日程表论文(16页珍藏版)》请在金锄头文库上搜索。

1、附件二【学生用】算法分析与设计综合训练实习报告题目:利用分治思想设计循环赛日程表学号姓名专业班级指导教师实践日期目录一、综合训练目的与要求. 1二、综合训练任务描述. 1三、算法设计 . 1四、详细设计及说明. 3五、调试与测试. 5六、实习日志 . 6七、实习总结 . 6八、附录:核心代码清单. 61 一、综合训练目的与要求本综合训练是软件工程专业重要的实践性环节之一,是在学生学习完算法分析课程 后进行的综合练习。本课综合训练的目的和任务: 1. 巩固和加深学生对算法分析课程基本知识的理解和掌握; 2. 培养利用算法知识解决实际问题的能力; 3. 掌握利用程序设计语言进行算法程序的开发、调试

2、、测试的能力; 4. 掌握书写算法设计说明文档的能力; 5. 提高综合运用算法、程序设计语言、数据结构知识的能力。二、综合训练任务描述假设有 n=2k 个运动员要进行网球循环赛。设计一个满足一下要求的比赛日程表:1. 每个选手必须与其他n-1 个选手各赛一次2. 每个选手一天只能赛一次3. 循环赛一共进行n-1 天利用 Java语言开发一个界面, 输入运动员的个数, 输出比赛日程表。 对于输入运动 员数目不满足 n=2k时,弹出信息提示用户。三、算法设计(1) 文字描述 假设 n 位选手顺序编号为 1,2,3n,比赛的日程表是一个n 行 n-1 列的表格。 i 行 j 列的表格内容是第i 号选

3、手在第 j 天的比赛对手。 根据分而治之的原则,可从其中一半选手的比赛日程,导出全体n 位选手的的日程,最 终细分到只有两位选手的比赛日程出发(2) 框图2 比赛人数n=2k,求出 k N N Y N Y N Y Y N Y int i=1 i=N i+ a1i=i i+ m=1 s=1 s=k? N=N/2 int t=1 t=N? int i=m+1 i=2*m j=m+1 j=m+1 aij+(t-1)*m*2 = ai-mj+(t-1)*m*2-m aij+(t-1)*m*2-m = ai-mj+(t-1)*m*2 j+ i+ t+ s+ m=m*2 结束3 (3) 伪代码public

4、staticvoid Table( int n, int a) int b = 2; n = saicheng. x;/参赛人数intk=( int ) (Math. log(n)/Math. log (b); /计算输入值是2的几次幂for (int i=1;i=n;i+) a1i=i; /打印出第一行即选手1的赛程表 int m=1; /控制每一次填充表格时i(i表示行)和 j(j表示列)的起始填充位置for (int s=1;s=k;s+) n/=2; /将问题分成 k部分for (int t=1;t=n;t+) /对每一部分进行划分 for (int i=m+1;i=2*m;i+)/控

5、制行 for (int j=m+1;j=2*m;j+)/控制列 aij +(t - 1) * m *2 = ai - mj + (t - 1) * m * 2 - m;/右下角等于左上角aij + (t - 1) * m * 2 -m = ai - mj + (t - 1) * m * 2;/左下角等于右上角 m*=2; 四、详细设计及说明1. 输入一个数字n,根据( xi=N;i+) a1i = i ;1 2 3 4 5 6 7 8 3 定义一个m值,m初始化为1,m用来控制每一次填充表格时i(i 表示行)和j (j 表示列)的起始填充位置。4 4. 用一个 for循环将问题分成几部分,对于

6、k=3, n=8,将问题分成3 大部分,第一部分为,根据已经填充的第一行,填写第二行,第二部分为,根据已经填充好的第一部分,填写第三四行,第三部分为,根据已经填充好的前四行,填写最后四行。for (int s=1;s=k;s+) N/=2; 5. 用一个 for循环对 4 中提到的每一部分进行划分for(int t=1;t=N;t+) 对于第一部分,将其划分为四个小的单元,即对第二行进行如下划分同理,对第二部分(即三四行),划分为两部分,第三部分同理6. 最后,进行每一个单元格的填充。填充原则是:对角线填充for(int i=m+1;i=2*m;i+) /i 控制行for(int j=m+1;

7、j=2*m;j+) /j 控制列 aij+(t-1)*m*2 = ai-mj+(t-1)*m*2-m;/*右下角的值等于左上角的值*/ aij+(t-1)*m*2-m = ai-mj+(t-1)*m*2;/*左下角的值等于右上角的值*/ 例:由初始化的第一行填充第二行1 2 3 4 5 6 7 8 2 1 4 3 6 5 8 7 进行第二部分的填充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 最后是第三部分的填充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

8、 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 5 五、调试与测试测试一:输入一个不是2k 的数字结果如图2 所示:测试二:输入8 结果如图3 所示:图 2 输入的数字不符题意图 3 输入 8 所示赛程表6 六、实习日志9 月 13 日理解题意,题目要求,确定使用分治法解决。9 月 14 日根据书上分治法的设计思路以及所提供的代码按题目要求设计算法。9 月 15 日根据算法写出代码。9 月 16 日根据代码设计SWT 界面。9 月 17 日总结,写论文。七、实习总结根据分治算法,将本问题进

9、行了由小规模到大规模的求解设计,程序设计的关键点在于如何对问题进行划分和填充公式的归纳。在划分时, 主要运用了两个for 循环; 在填充时, 运用了两个for循环。通过这次程序设计,加深了对分治算法的认识。解决具体问题时,程序故重要,但一个好的算法更加重要。不足之处即花费了很长时间来推导这个算法,对算法掌握还不够熟练。八、附录:核心代码清单输入界面代码:import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Button; impor

10、t org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import com.swtdesigner.SWTResourceManager; publicclass saicheng protected Shell competetion ; private Text t

11、ext; 7 publicstaticint x; /* Launch the application.* paramargs*/publicstaticvoid main(String args) try saicheng window = new saicheng(); window.open(); catch (Exception e) e.printStackTrace(); /* Open the window.*/publicvoid open() Display display = Display.getDefault (); createContents(); competet

12、ion .open(); competetion .layout(); while (!competetion .isDisposed() if (!display.readAndDispatch() display.sleep(); /* Create contentsof the window.*/protectedvoid createContents() competetion = new Shell(); competetion .setSize(450, 300); competetion .setText( “u6BD4u8D5Bu65E5u7A0Bu8868u8BA1u7B97

13、“); Button button = new Button( competetion , SWT. NONE ); button.addSelectionListener(new SelectionAdapter() 8 publicvoid widgetSelected(SelectionEvent e) x=Integer. valueOf (text.getText(); if(x eeee eeee= new eeee(); eeee.open(); else competetion .close(); ssss ssss= new ssss(); ssss.open(); ); b

14、utton.setBounds(125, 158, 72, 22); button.setText(“u786Eu8BA4“); final Button button = new Button( competetion , SWT. NONE ); button.addSelectionListener(new SelectionAdapter() publicvoid widgetSelected(SelectionEvent e) System. exit(0); /退出系统 ); button.setBounds(226, 158, 72, 22); button.setText(“u

15、9000u51FA“); Label label = new Label( competetion , SWT. NONE ); label.setFont(SWTResourceManager.getFont (“黑体 “, 12, SWT. NORMAL ); label.setAlignment(SWT.CENTER ); label.setBounds(107, 84, 128, 19); label.setText( “u8BF7u8F93u5165u6BD4u8D5Bu4EBAu6570uFF1A“); text = new Text( competetion , SWT. BORDER ); text.setBounds(241, 81, 84, 22); 9 提示错误界面import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.SWT; import org.eclipse.swt

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号