求一个关于考试座位排列的算法

zhu6100441 2011-03-07 04:29:00
算法题目:
设定一定数量的教室,设定教室规格
(如 3个教室 20M*15M 2个,20*12M1个),设定几种桌子规格(60CM*30CM 120CM*30CM,等等),设定几种考试类型
(开卷 间隔1人或1列,闭卷,间隔2列或2人2列,上机随即,不用间隔人,只间隔过道),程序功能能自动解答。
1.某种规格的桌子能在某种教室排列状况
2.当桌子排定后,某类考试在该教室可以进行的人数,
3.教室已定,桌子已定,考试类型已定,某次考试(设定总人数)可以提供的教室方案。
...全文
613 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
小愛 2011-03-08
  • 打赏
  • 举报
回复
代碼中 rowCount = rowCount/(HiwayTest3.OPENROWSPACE+1)+1;
這些地方有點錯誤,應該改成Math.ceil(rowCount/(HiwayTest3.OPENROWSPACE+1))
當時考慮 座位排數是奇數時要+1,忘記偶數是不需要+1的,因此改成Math.ceil()就可以了
zhu6100441 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lostman_superman 的回复:]

再問下LZ:排桌子的時候,兩個桌子之間的空間?還有過道的寬度? 這些條件都沒有啊
[/Quote]
大哥,你是强人,写得很好!谢谢了!!
zhu6100441 2011-03-07
  • 打赏
  • 举报
回复
教室的宽度及长度都以及给出来了,桌子的长度和宽度也有。
例如,取一个 20M*15M的教室,里面放60CM*30CM的桌子,可以放多少张桌子,按照什么样的方式放,这些都是程序需要来计算的。所以对于桌子之间的间隔以及过道的间隔,都是应该由程序来完成。
至于人与人之间的间隔问题,按我的理解,闭卷2个人间隔应该是2个位置,开卷的话就间隔1人。而上机,因为上机题是随机的,所以人和人之间可以没有间隔,但是教室得留出过道。
我也在不断的思考到底怎么弄这个程序,请各位大大多提意见及建议!~~
小愛 2011-03-07
  • 打赏
  • 举报
回复

import java.util.Vector;

public class HiwayTest3 {
// private static final int ROOMCOUNT = 10;//10個教室

private static final int ROOMWIDTH1 = 20*100;//轉換為CM
private static final int ROOMLENGTH1 = 15*100;

private static final int ROOMWIDTH2 = 20*100;
private static final int ROOMLENGTH2 = 12*100;

private static final int DESKWIDTH1 = 60;
private static final int DESKLENGTH1 = 30;

private static final int DESKWIDTH2 = 120;
private static final int DESKLENGTH2 = 30;

private static final int EXPERIMENT = 0;//上機

private static final int OPENBOOKEXAM = 1;//開卷
private static final int OPENROWSPACE = 1;//行間隔
private static final int OPENCOLSPACE = 1;//列間隔

private static final int CLOSEBOOKEXAM = 2;//閉卷
private static final int CLOSEROWSPACE = 2;//行間隔
private static final int CLOSECOLSPACE = 2;//列間隔

private static final int DESKROWSPACE = 40;//桌子前后的間隔
private static final int DESKCOLSPACE = 40;//桌子左右的間隔 過道的寬度

public static void main(String...args){
HiwayTest3 ht = new HiwayTest3();
// 四個參數:教室寬 教室長 桌子寬 桌子長
ht.deskArray(HiwayTest3.ROOMWIDTH1,HiwayTest3.ROOMLENGTH1,HiwayTest3.DESKWIDTH1,HiwayTest3.DESKWIDTH2);
ht.examStudentNum(HiwayTest3.ROOMWIDTH2, HiwayTest3.ROOMLENGTH2, HiwayTest3.DESKWIDTH2, HiwayTest3.DESKLENGTH2, HiwayTest3.OPENBOOKEXAM);
}

// 某種桌子在某種教室的排列情況
private Vector deskArray(int roomWidth,int roomLength,int deskWidth,int deskLength){
ClassRoom cr = new ClassRoom(roomWidth,roomLength);
Desk desk = new Desk(deskWidth,deskLength);
int colCount = cr.getWidth()/(desk.getWidth()+DESKCOLSPACE);
int rowCount = cr.getLenght()/(desk.getLength()+DESKROWSPACE);
System.out.println(cr+"能放"+colCount+"列"+rowCount+"行"+desk+"的桌子");

Vector<Integer> vec_deskArray = new Vector<Integer>();
vec_deskArray.add(rowCount);
vec_deskArray.add(colCount);
return vec_deskArray;
}
// 桌子佈置已定,某種考試類型的人數
private int examStudentNum(int roomWidth,int roomLength,int deskWidth,int deskLength,int type){
Vector<Integer> v = this.deskArray(roomWidth,roomLength,deskWidth,deskLength);
int rowCount = v.get(0);
int colCount = v.get(1);
if(type==HiwayTest3.OPENBOOKEXAM){//開卷考試
rowCount = rowCount/(HiwayTest3.OPENROWSPACE+1)+1;
colCount = colCount/(HiwayTest3.OPENCOLSPACE+1)+1;
System.out.println("開卷考試可以容納:"+(rowCount*colCount)+"人");
return rowCount*colCount;
}
if(type==HiwayTest3.CLOSEBOOKEXAM){
rowCount = rowCount/(HiwayTest3.CLOSEROWSPACE+1)+1;
colCount = colCount/(HiwayTest3.CLOSECOLSPACE+1)+1;
System.out.println("閉卷考試可以容納:"+(rowCount*colCount)+"人");
return rowCount*colCount;
}
if(type==HiwayTest3.EXPERIMENT){
System.out.println("上機考試可以容納:"+(rowCount*colCount)+"人");
return rowCount*colCount;
}
return 0;

}

//

// ====inner class==================
// 教室類
class ClassRoom{
private int width ;
private int length;

public ClassRoom(int width,int length){
this.width = width;
this.length = length;
}

public int getWidth(){
return this.width;
}

public int getLenght(){
return this.length;
}

@Override
public String toString(){
return "教室規格:"+this.width+"\t"+this.length;
}
}

// 課桌類
class Desk{
private int width ;
private int length;

public Desk(int width,int length){
this.width = width;
this.length = length;
}

public int getWidth(){
return this.width;
}
public int getLength(){
return this.length;
}

@Override
public String toString(){
return "桌子規格:"+this.width+"\t"+this.length;
}
}

// 考試類
class Exam{
private int type;
private int rowSpace;
private int colSpace;

public Exam(int type,int rowSpace,int colSpace){
this.type = type;
this.rowSpace = rowSpace;
this.colSpace = colSpace;
}

public int getType(){
return this.type;
}
public int getRowSpace(){
return this.rowSpace;
}
public int getColSpace(){
return this.colSpace;
}
}
}

第三個問不知道LZ是什麽意思?

教室已定了,怎麼還要求教室方案? 教室類型已定,根據考試總人數求出需要教室數? 不會這么簡單吧
小愛 2011-03-07
  • 打赏
  • 举报
回复
再問下LZ:排桌子的時候,兩個桌子之間的空間?還有過道的寬度? 這些條件都沒有啊
小愛 2011-03-07
  • 打赏
  • 举报
回复
闭卷,间隔2列或2人2列 這句話有問題吧?

閉卷,間隔2列或2人 ?
zhu6100441 2011-03-07
  • 打赏
  • 举报
回复
我唯一的想法是,考试人数和考试类型可以作为参数传进去,然后程序根据这2个参数选择一个教室进行考试。但是对于选择哪个教室以及座位的排法,我暂无头绪。
或者程序先把所有教室可能的座位排序做好,然后再来根据人数选个教室就能考试了,但这样好像又没考虑到具体要考试的科目所能接受的座位方式,所以觉得有点棘手。请各位大大帮帮忙了。
小愛 2011-03-07
  • 打赏
  • 举报
回复
頭像是LZ 嗎,挺beautiful的,呵呵 sincerely appreciate

大多csdner男只是語言色,本質還是不色的,呵呵


話歸正傳,題目有點小難,先mark下,明天給答案。 其它csdn高手們可以先幫下啊
G_beginner 2011-03-07
  • 打赏
  • 举报
回复
想知道LZ有什么想法
coolbamboo2008 2011-03-07
  • 打赏
  • 举报
回复
面向对象的方式就是先把教室、桌子、考试类型等抽象成对象
具体怎么算,我想桌子要有编号,然后根据考试类型确定人员怎么坐,桌子有没有人坐要有个状态……
大概各种事
zhu6100441 2011-03-07
  • 打赏
  • 举报
回复
你们都是不厚道的人。。。
我嘞个去 2011-03-07
  • 打赏
  • 举报
回复
我是来看LZ头像的!
第1篇 Excel基本功能 • 冻结窗格 • 名称框定位 • 区域名称显示 • 多表区域设置格式 • 自动填充功能 • 数据的格式化 • 设置数字格式 • 数据类型转换 • 自定义数字格式 • 数据的填充复制 • 数据的查找替换 • 格式查找替换 • 数据中含通配符的查找 • 表格边框设置立体效果 • 如何在Excel自动扩展格式 • 如何在Excel自动套用格式 • 自定义工具栏 • 非连续区域集中打印 • 设置打印标题 第2篇 使用公式和函数 • 使用简单公式计算产品销售利润 • 使用相对和绝对引用计算产品销售额与利润 • 多表区域引用 • 利用混合引用制作九九乘法表 • INDEX函数和SUMIF函数特殊情况下的易失性 • Excel公式结果的检验和验证 • 创建Excel动态名称来实现采购数据的动态引用 • 成绩检索表-Excel名称代替引用 • Excel图表中使用名称 • 相对引用和混合引用定义名称 • 借用“列表”定义动态名称 • Excel工作表复制的名称问题 • 利用文本比较标识首次出现的记录 • 更改数据字母大小写 • 利用MID 函数提取身份证号码中的8 位生日数字 • 使用文本提取函数进行数字分列 • 使用查找函数拆分空格分隔的数据 • 实现EAN-13条码的校验位的算法 • 利用文本查找函数进行模糊查找 • 利用SEARCHB 函数分离全半角字符 • 利用FIND 函数提取连续数字 • 统计开奖号码中不重复数字个数 • 取得零件规格中的最后序号 • 利用TEXT函数格式化设备编号 • 从身份证号码中提取员工的生日信息 • 使用TEXT 函数显示中文格式的年份 • 将数值转换为商业发票中的中文大写金额 • 生成中文大写金额 • 利用CELL 函数取得动态工作表标签名称 • 利用MOD 函数生成数字校验码 • 利用MOD 函数实现培训反馈表中票数和 • 利用取舍函数生成重复个数的自然数序列 • 按照特定条件进行取舍计算 • 利用取舍函数解决四舍六入问题 • 产生50~100 的随机整数 • 利用随机函数仅生成数字和字母 • 利用随机函数实现考试座位随机编排 • 日计帐中的余额累计 • 计扣个人所得税 • 统计月末考试中大于等于平均分的总分 • 利用CHAR 函数生成A~Z 序列 • 利用DATE 函数生成指定日期 • 利用运算符计算日期相差天数 • 利用日期函数计算公民年龄 • 利用日期函数计算员工退休日期 • 计算上月的天数 • 计算目标日期所在季度的最后一天 • 返回目标日期是全年中的第几天 • 判断是否为闰年 • DATEDIF函数基本用法 • 利用日期函数计算员工工龄 • 计算指定日期的星期值 • 计算上月月末日期的星期 • 指定某月的第几周的天数 • 推算出指定年份的母亲节和父亲节日期 • 计算上个月的考勤天数 • 计算基金赎回入账日期 • 加班时间的累加 • 计算车间工人工时 • 员工加班时间的舍入计算 • 使用VLOOKUP 函数进行员工信息查询 • 利用HLOOKUP 函数查询产品月销售量 • 查找某员工是否登记在员工信息表中 • 判断员工公积金是否重复提缴 • 查询申购基金的申购手续费 • 从成绩明细表中查询学员总成绩 • 利用LOOKUP 函数实现无序查询 • 取得最后非空单元格数值 • 利用行列号函数生成永恒的序号 • 查询员工信息表中所有人事信息 • 利用INDIRECT函数动态统计产品销量 • 利用OFFSET函数产生区域引用 • 利用INDEX函数隔行提取数据 • 多条件组合查询资料 • 利用INDEX函数结合MATCH函数进行向左查找 • 实现根据学员成绩查询等级 • 确定工资单中最后一名员工的位置 • 根据工资表生成工资条 • 利用CHOOSE函数重新生成内存数组 • 利用查找函数进行多表数据标识 • 实现多区域联合判断值 • VLOOKUP函数实现向左查询 • 从生产配件编号中提取连续的数字编码 • 利用MATCH 函数提取连续数值 • 查询并汇总各产品销售额 • 利用MATCH函数汇总最后3 天的产品销售额 • 利用RANK函数实现按班级进行动态排名 • 利用COUNT函数统计培训反馈表中的平均票数 • 动态引用商品进货明细表 • 统计培训课程表中各部门的授课数 • 统计进货量大于5小于10的型号数量 • 标注各种水果第1次出售日期 • 查询重复输入员工身份证 • COUNTIF函数使用通配符统计示例 • 汇总指定公司的产品季度销量 • 统计二季度手机销量情况 • 利用SUMIF 函数实现多表汇总 • 按区间统计数值个数 • 学员英语成绩分段统计人数 • 计算比赛评分表中频率最高的分值 • 利用极值函数限定销售价格 • 取得不重复的第2 个最低报价 • 统计各科成绩大于等于平均分的总平均分 • 计算体操比赛的选手得分 • 统计年度培训完成情况表 • 在筛选条件下生成连续序号 • 按学员成绩进行排名 • 根据比赛成绩实现中国式排名 • 根据学员成绩的百分比占比划分等级 • 统计购买商品的不重复VIP 用户数 • 商品月度销量统计汇总 • 统计足彩数据中最多连胜场数 • 单利与复利的比较 • 终值系数和现值系数 • 普通年金终值和现值的计算过程 • 预付年金终值和现值的计算过程 • 递延年金终值和现值的计算过程 • 年金终值系数表和年金现值系数表 • 名义利率与实际利率 • 整存整取 • 零存整取(一) • 零存整取(二) • 房屋的价值(一) • 房屋的价值(二) • 买卖房屋的利润率 • 投资经营房屋的利润率 • 多久才能拥有100万(一) • 多久才能拥有100万(二) • 孩子上大学的学费(一) • 孩子上大学的学费(二) • 孩子上大学的学费(三) • 利用Excel财务函数计算住房按揭还款计划 • 相同间隔时间序列的现金流量净现值 • 相同间隔时间序列的现金流量内部收益率 • 不规则时间序列和现金流量的净现值与内部收益率 • 考虑融资成本和再投资收益的内部收益率 • 直线折旧法 • 年限总和折旧法 • 固定余额递减折旧法 • 双倍余额递减折旧法 • 可变余额递减法的累计折旧 • 累计到第2年第3 季度中期的累计折旧 • CONVERT函数的应用 • 使用CONVERT函数应注意正确书写 • 多单元格数组公式计算销售金额 • 单个单元格数组公式计算销售总额 • 两个一维数组的乘法运算 • 两个一维数组的连接运算 • 使用两个一维数组构造二维数组 • 部门评价等级转换 • 使用MMULT 函数计算产品结构指数 • 产生1-10 的自然数垂直序列和水平序列 • 等比例构造一维循环数组 • SUMIF函数对产品产量进行逐行汇总 • 利用MMULT函数实现数组累加 • 将销售明细表中合并单元格填充地区名称 • 将二维数组按列转换为一维数组 • 数组公式实现单条件和 • 计算一周中内存采购的平均价格 • 统计各品牌的商品销量汇总 • 利用COUNT函数代替SUM 函数统计不重复记录 • 标识零件规格号中的非法数据 • 将中文大写日期转换成日期序列 • 实现按日期和客户名查询数据 • 按条件实现总表拆分到分表 • 按比赛成绩进行降序排列 • 对员工信息表中员工姓名排序 • 从培训课程安排表中提取讲师部门 • 从商品明细表中提取唯一品牌名称 • 根据商品和品牌确定唯一品牌名称 • 多维引用示例的数据来源 • 利用INDIRECT函数返回对多表区域的引用 • 金额最大的费用项目 • 提取无重复的水果清单 • 计算按原始股折算的某股票最高价格 • 计算用餐记录分摊实例 • 计算最好成绩和的最优成绩实例 • 跨多表条件和 • 宏表函数取得工作表标签名称 • 标识商品销售表中红色字体的记录 • 按照商品采购表中的数值格式显示查询结果 • 提取指定单元格的公式表达式 • 根据立方体指定参数计算公式结果 • 提取固定字符间隔的零件规格号 第3篇 创建图表和图形 • 图表种类 • 柱形图 • 条形图 • 折线图 • 饼图 • XY散点图 • 面积图 • 圆环图 • 雷达图 • 曲面图 • 气泡图 • 股价图 • 圆柱图、圆柱图和棱锥图 • 自定义图表类型 • 线-柱图 • 两轴折线图 • 对数图 • 组合图 • 创建自定义图表 • 添加误差线 • 设置轴格式 • 分类坐标轴标签 • 空单元格的绘制方式 • 设置单个数据点格式 • 设置透明色 • 多工作表数据作图 • 添加趋势线 • 设置三维图表 • 数字条件格式 • 设置坐标轴的交点 • 使用次坐标轴 • 图表上的文本框 • 图表的组合 • Microsoft Graph图表 • 图表转为图片 • 设置自动筛选 • 添加辅助行 • 定义名称 • 数据透视图 • 使用Excel VBA • 添加水平线 • 添加垂直线 • 复合饼图 • 等高线图 • 直方图 • 排列图 • 控制图 • 动态对比图 • 动态股票图 • XY散点折线图的内插值计算 • 自选图形种类 • 插入自选图形 • 添加文本 • 自选图形绘制线条和连接符 • 旋转和翻转 • 对齐和分布 • 自动靠齐 • 设置叠放次序 • 设置组合 • 设置阴影 • 设置三维效果 • 设置超链接 • 制作室内平面图 • Excel图形 • Excel工作表背景 • 插入图片到Excel工作表 • 图片的调整 • 裁剪图片 • 旋转图片 • 设置图片的透明色 • 插入动态图片 • 制作组织结构图 • 流程图 • 循环图 • 射线图 • 棱锥图 • 维恩图 • 目标图 • 创建艺术字 • 插入剪贴画 第4篇 使用Excel进行数据分析 • 数据列表的实例 • 使用记录单为数据列表命名动态名称 • 数据列表按行排序 • 含有公式的数据排序 • 简单排序的例子 • 自定义排序 • “关系或”条件的高级筛选 • “关系与”条件的高级筛选 • 利用高级筛选选择不重复的记录 • 三个“关系或”条件的高级筛选 • 使用计算条件的Excel高级筛选 • 同时使用“关系与”和“关系或”的Excel高级筛选 • 创建分类汇总 • 列表 • Excel分列功能 • 使用“导入外部数据”功能导入标准工时数据 • Microsoft Query检索数据源 • 销售数据清单 • 定义名称创建动态数据透视表 • 分页显示数据透视表 • 使用数据列表功能创建动态数据透视表 • 按日期或时间项组合 • 按数字项组合 • 指定项组合 • 创建计算字段 • 添加下计算项 • 获取Excel数据透视表数据 • 创建复合范围的Excel数据透视表 • 数据透视图 • 模拟运算表 • 单变量解 • 规划解 • 分析工具库 第5篇 使用Excel的高级功能 • 设置单元格数值条件 • 设置公式条件 • 复制删除条件格式 • 应用示例 • 优先顺序 • Excel数据有效性允许的条件 • 定位复制删除Excel数据有效性 • 数据有效性的高级应用 • 数据有效性的高级应用_多表不重复输入 • 分级显示 • 合并计算 第6篇 使用Excel进行协同 • Excel单元格引用建立链接统计奖金总额 • 超链接实例 • 创建Excel动态超链接 • 发布(不)具有交互性的网页_Excel的交互性 • 创建Web查询 • Excel和ASP • Excel与XML数据 • Excel与其他应用程序共享数据 • 使用Excel工作组 第7篇 Excel自动化 • 录制宏 • VBA语言基础 • 与Excel进行交互 • Excel的自定义函数 • 如何操作Excel工作簿、工作表和单元格 • 工作表的Change事件 • 工作表中高亮显示行和列 • 文件保存提醒 • 关闭工作簿是恢复Excel默认设置 • 设置Excel工作簿打开时的界面 • VBA事件激活的顺序 • VBA事件的激活与禁止 • 插入命令按钮 • 使用命令按钮设置单元格格式 • 使用复选框控件制作多选调查问卷 • 使用选项按钮控件制作单项调查问卷 • 使用组合框控件制作调查问卷 • 使用文本框控件快速录入三位数字 • Excel工作簿中插入用户窗体 • 在用户窗体中插入控件 • 为窗体控件添加事件代码 • 用户窗体的QueryClose事件和Terminate事件

50,527

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧