没有合适的资源?快使用搜索试试~ 我知道了~
首页构造15倍数整数算法:C++实现与详解
构造15倍数整数算法:C++实现与详解
需积分: 49 16 下载量 189 浏览量
更新于2024-09-10
收藏 45KB DOC 举报
本实验报告关注于数字构造问题,具体任务是给定一个只包含数字0-9的字符串,目标是利用其中的字符构建一个能被15整除的最大整数。该问题来源于海南师范大学《算法分析与设计》课程的实验部分,由两位同学合作完成。 实验内容分为三个主要步骤: 1. 数据预处理:首先,学生需要读取输入文件`input.txt`,其中包含一串数字,如02041。接下来,他们要统计每个数字出现的次数,并用变量`len`记录数组的长度。在这个过程中,需要特别注意不能有数字5或0,因为它们会影响整除15的结果,如果存在这些数字,实验会直接判断为"impossible"。 2. 算法设计:核心算法是通过排序和贪心策略实现。首先,将输入的字符串转换为整数数组`a[]`,并用`x`表示每个数字的大小,同时记录每个数字是否可用(`bo`)。接着,对数组进行快速排序,将数字从大到小排列。对于每个元素,计算其对3的余数并记录在`rest`字段中。然后,根据余数规则进行操作:若所有数字之和除以3余1,删除最小的余1数;若余2,删除最小的余2数;如果既无余1也无余2,删除两个最小的余2数。最后,如果数组中有0,保持原样输出;若无0,确保至少有一个5在个位上,输出满足条件的整数。 3. 程序实现:实验者编写了C++程序,使用VC++6.0环境运行。程序定义了一个结构体`a[]`,用于存储字符转换的数字、可用标志以及余数信息。通过循环遍历和排序,最终找到符合条件的最大整数。 通过这个实验,学生们不仅锻炼了解决数字构造问题的能力,还学习了快速排序算法、贪心策略以及如何在实际编程环境中应用算法来解决问题。
资源详情
资源推荐
4 程序说明
!"#$%####&&定义一个数数组
##''%&&用户输入一个数组
####(#")*%&&#存储数组的长度
##+")##(#%,(%*
-&&循环 次
##!#(##.###.#//%
&&将字符转换成数字,结构体中的 #,记录每个字符的大小
##!#(#+!%&&记录此数是否可用
#0
##+")1*%&&快速排序将输入的数组数值由大到小排列,得到排列后的数组
##+")#2#(#%2,(%2*
-
##!2"#(#!2#3%&&结构体中的 " 记录每个数值对 求余的余数
#0#
#4)*%&&寻找满足整除整除 ,并且末尾是 或者 的最大数。
5 算法复杂性分析
此算法时间复杂度,主要体现快速排序上,快速排序每一次划分把一个问题分
解成两个子问题 5##(#!5&##+#)*其中:!#(#1##(#1#+)*#(#6)*
,平均情况下复杂性为 6)7*,最坏情况一边是一个,一边是 . 个,所以
时间复杂度为 6)*。
6 实验结果
a) 输入参数
456987231
b) 输出结果
987643215
剩余11页未读,继续阅读
android_小二
- 粉丝: 0
- 资源: 2
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 多传感器数据融合手册:国外原版技术指南
- MyEclipse快捷键大全,提升编程效率
- 从零开始的编程学习:Linux汇编语言入门
- EJB3.0实例教程:从入门到精通
- 深入理解jQuery源码:解析与分析
- MMC-1电机控制ASSP芯片用户手册
- HS1101相对湿度传感器技术规格与应用
- Shell基础入门:权限管理与常用命令详解
- 2003年全国大学生电子设计竞赛:电压控制LC振荡器与宽带放大器
- Android手机用户代理(User Agent)详解与示例
- Java代码规范:提升软件质量和团队协作的关键
- 浙江电信移动业务接入与ISAG接口实战指南
- 电子密码锁设计:安全便捷的新型锁具
- NavTech SDAL格式规范1.7版:车辆导航数据标准
- Surfer8中文入门手册:绘制等高线与克服语言障碍
- 排序算法全解析:冒泡、选择、插入、Shell、快速排序
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功