[求助]消除冗余序列算法
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的大整数,将其转换成为二进制表示后进行如上处理。