复试算法练习Day08
复试算法练习Day08
文章目录
- 复试算法练习Day08
- 题目描述
- 题目来源
- 输入描述:
- 输出描述:
- 示例1
- 思路
- 具体实现
- 时间复杂度
- 小结
题目描述
•输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;
•长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。
题目来源
https://www.nowcoder.com/practice/d9162298cb5a437aad722fccccaae8a7?tpId=37&tqId=21227&rp=1&ru=/exam/oj/ta&qru=/exam/oj/ta&sourceUrl=%2Fexam%2Foj%2Fta%3Fpage%3D1%26tpId%3D37%26type%3D37&difficulty=undefined&judgeStatus=undefined&tags=&title=
输入描述:
连续输入字符串(每个字符串长度小于等于100)
输出描述:
依次输出所有分割后的长度为8的新字符串
示例1
输入:
abc
输出:
abc00000
思路
采用求余方法,把字符串数组的内容放入一个新数组,新的数据每次满八个就会刷新一次,主要利用的是旧的数组角标对8取余作为新数组的角标,但是要考虑数组从0开始计数,所以开始的时候要设计排除条件,得到其余的求余为0的角标后正常输出回车。
具体实现
//长字符串分隔为长度为8的数组的短字符串
#include<stdio.h>
#include<string.h>
//初始化并设置字符串数组与新的分隔数组
int len;
char str[101],new[101];
int extra,add,des,i,count=0,j;
int main(){
while(scanf("%s",str)!= EOF){
len = strlen(str);
//检测字符串长度,将字符串对8取余
for( i = 0; i < len ;++i ){
new[i%8] = str[i];
//将取余后的结果作为新的字符串角标所表示内容,并将结果放入
if((i%8)==0 && i> 0){
printf("\n");
}
printf("%c",new[i%8]);
}
//补充取余为0的情况的结果,也将其放入新的数组
while(len%8){
printf("0");
++len;
}
printf("\n");
}
return 0;
}
##采用lijust方法,不断自迭代打印
try:
while True:
#读入字符串
s = input()
#利用str.ljust(width[, fillchar]):函数
#制定字符串的长度,填充多余字符,默认为空格
while len(s):
#按数组大小为8来分隔,左对齐并输出
print(s[:8].ljust(8, '0'))
s = s[8:]
except EOFError:
pass
时间复杂度
对于C语言的方法来说,首先遍历了数组得到数组长度之后,利用取余解决数组分隔的问题,时间复杂度为O(n)
对于Python方法来说,采用了str.ljust(width[, fillchar]):函数,通过多次迭代,按8为数组分隔大小左对齐输出,时间复杂度也为O(n)
小结
利用取余函数可以实现数组的分隔,但是由于数组下标从0开始,所以要考虑为0的时候的特殊情况并把其加入后来的分隔数组,利用Python写的时候采用自带的库函数——str.ljust(width[, fillchar]),但是要注意的是,返回值是对于原字符串左对齐,并利用空格填充指定长度的新字符串,如果指定长度小于原字符串的长度,则返回原字符串并添加空格补齐。