一、题目:消除冗余序列算法
二、目的与要求
1. 目的:
(1)通过在许多大数值计算中,“1”是代表执行某种运算,如果在“0”、“1”组成的字符串序列中,“1”的个数多少决定整个问题计算复杂度和计算速度的高低,设计一种算法来消除序列中冗余字符“1”的个数是实际非常需要的。培养学生综合利用C++语言进行科学计算,使学生将所学知识转化为分析和设计简单实际问题的能力,学会查资料和工具书。
(2)提高学生建立程序文档、归纳总结的能力。
(3)进一步巩固和灵活运用先修课程《计算机文化基础》有关文字处理、图表分析、数据归整、应用软件之间图表、数据共享等信息技术处理的综合能力。
2. 基本要求:
要求用C++语言编程,在Visual C++环境下调试完成;
三、设计方法和基本原理
1. 课题功能描述
在0、1组成的字符串序列中,如果存在连续n个(n>=3)“1”构成的子序列则将该子序列改为10…02,其中0的个数为n-1个。
例如:
原始序列为: 111110011110111011;
修改后的序列为: 1000020100021002011。
2. 问题的解决方案:
定义一个比较大的字符数组;
从键盘读入数据;检查数据的合法性(如果有非字符“0”或字符“1”就认为非法),如果非法重新读入;
确定字符串的长度。
从字符串的尾部开始判断字符“1”的个数,如果数目超过3个,则最后一位改为“2”,而将中间n-1位改为“0”,而将前面原始是“0”的位置改为“1”。
如果是最低位0位开始有超过3个“1”,还需要将数据整体后移一位,然后再将最后一位改为“2”,而将中间n-1位改为“0”,而将第0位放置为“1”。
例如上面例子中,原始序列是18位,而修改后序列为19位,原因就是最低5位为“1”,因此需要将数据整体后移一位,并且第0位放置为“1”。
四、创新要求
在基本要求达到后,进行创新设计,输入数据不是字符串,而是大于232-1的大整数,将其转换成为二进制表示后进行如上处理。
如何消除冗余序列算法