华为机试练习

HJ2 计算某字符出现次数

https://www.nowcoder.com/share/jump/7064737441730898928864
描述
写出一个程序,接受一个由字母、数字和空格组成的字符串,和一个字符,然后输出输入字符串中该字符的出现次数。(不区分大小写字母)
数据范围: 1≤n≤1000

输入描述:
第一行输入一个由字母、数字和空格组成的字符串,第二行输入一个字符(保证该字符不为空格)。

输出描述:
输出输入字符串中含有该字符的个数。(不区分大小写字母)

示例1

输入:
ABCabc
A
输出:
2

题解

str1=input().lower()
obstr=input().lower()
print(str1.count(obstr))

Python 将字符串大写字母转换为小写字母:s.lower(),s为字符串
Python 统计字符串某个字符串个数:s.count(n),s为字符串,n为需要统计的字符

HJ4 字符串分隔

https://www.nowcoder.com/share/jump/7064737441730901150519
描述
输入一个字符串,请按长度为8拆分每个输入字符串并进行输出;
长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。

输入描述:
连续输入字符串(每个字符串长度小于等于100)

输出描述:
依次输出所有分割后的长度为8的新字符串

示例1

输入:
abc
输出:
abc00000

题解

n=input()
while len(n)>8:
    print(n[:8])
    n=n[8:] 
print(n+"0"*(8-len(n)))


HJ14 字符串排序

https://www.nowcoder.com/share/jump/7064737441729320977189
描述
给定 n 个字符串,请对 n 个字符串按照字典序排列。
数据范围: 1≤n≤1000,字符串长度满足1≤len≤100

输入描述:
输入第一行为一个正整数n(1≤n≤1000),下面n行为n个字符串(字符串长度≤100),字符串中只含有大小写字母。
输出描述:
数据输出n行,输出结果为按照字典序排列的字符串。

示例1

输入:          输出:
	9			   boat								
	cap			   boot
	to			   cap
	cat			   card
	card		   cat
	two			   to
	too			   too
	up			   two
	boat		   up
	boot

题解:

N=int(input())
lists=[]
for i in range(0,N):
    lists.append(input())
'''输出方法一'''
# for i in sorted(list):
#     print(i)
'''输出方法二'''
print('\n'.join(sorted(lists)))

字符串按照字典序排序相关使用方法
字典序排序通过两种不同的函数来实现:sort和sorted。
sort函数对列表进行原地排序,直接修改原有的列表;sorted函数对列表原始数据保持不变,排序结果会作为一个新列表。实例如下:

对列表按照字典序排序

s2=['cap', 'to', 'cat', 'card', 'two', 'too', 'up', 'boat', 'boot']
print(sorted(s2)) 
print(s2)
s2.sort()
print(s2)

输出结果:
sorted(s2)不改变列表原有的排序,s2.sort()改变列表原有的排序

['boat', 'boot', 'cap', 'card', 'cat', 'to', 'too', 'two', 'up']  
['cap', 'to', 'cat', 'card', 'two', 'too', 'up', 'boat', 'boot']
['boat', 'boot', 'cap', 'card', 'cat', 'to', 'too', 'two', 'up']

对字符串按照字典序排序

s="hello world"
print(''.join(sorted(s))

输出结果为: dehllloorw
其中,sorted(s)返回一个按照字典序排列的字符列表,''.join()将字符列表转为字符串

HJ15 求int型正整数在内存中存储时1的个数

https://www.nowcoder.com/share/jump/7064737441729324859324
描述
输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。
数据范围:保证在 32 位整型数字范围内

输入描述:
输入一个整数(int类型)

输出描述:
这个数转换成2进制后,输出1的个数

题解

n=int(input())
ns=bin(n)[2:]
print(ns.count('1'))

Python 整型int转换成二进制函数:bin()
Python 字符转Ascii码函数:ord(s),Ascii转换字符函数:chr(s)
Python 计算字符串中出现字符的个数:count(),str.count(sub, start= 0,end=len(string))

HJ23 删除字符串中出现次数最少的字符

https://www.nowcoder.com/share/jump/7064737441729406986240
描述
实现删除字符串中出现次数最少的字符,若出现次数最少的字符有多个,则把出现次数最少的字符都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。

数据范围:输入的字符串长度满足1≤n≤20 ,保证输入的字符串中仅出现小写字母

输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。
输出描述:
删除字符串中出现次数最少的字符后的字符串。

示例1

输入:aabcddd
输出:aaddd

题解

n=input()
ln={}
for i in n:
    if i in ln.keys():
        ln[i]=ln[i]+1
    else:
        ln[i]=1
min_value=min(ln.values())
min_key=[k for k,v in ln.items() if v == min_value]

for i in min_key:
    n=n.replace(i,'')
print(n)

相关知识
Python 查找字典中值的最小值:min_value=min(ln.values())
Python 查找字典中值的最小值所对应的键:min_key=[k for k,v in ln.items() if v == min_value]
Python 删除字符串中某个字符串的值:new_s=s.replace(删除的值,''),注意字符串是不可变的,s.replace不改变原来s的值,将删除后的值赋给了new_s。

HJ33 整数与IP地址间的转换

https://www.nowcoder.com/share/jump/7064737441730020682939

描述
原理:ip地址的每段可以看成是一个0-255的整数,把每段拆分成一个二进制形式组合起来,然后把这个二进制数转变成一个长整数。
举例:一个ip地址为10.0.3.193
每段数字 相对应的二进制数
10 00001010
0 00000000
3 00000011
193 11000001
组合起来即为:00001010 00000000 00000011 11000001,转换为10进制数就是:167773121,即该IP地址转换后的数字就是它了。
数据范围:保证输入的是合法的 IP 序列
输入描述:
1 输入IP地址
2 输入10进制型的IP地址

输出描述:
1 输出转换成10进制的IP地址
2 输出转换后的IP地址

示例1

输入
10.0.3.193
167969729
输出
167773121
10.3.3.193

题解

from math import ceil
str_ip = input().split(".")
int_ip = bin(int(input()))[2::] # 十进制转为二进制
bu_len=ceil(len(int_ip)/8)*8    
int_ip=int_ip.rjust(bu_len,'0') # 十进制转为二进制,高位补0

str_ip2 = ""
int_ip2 = []

for i in str_ip:
    str_ip2 += "{:08b}".format(int(i)) # 十进制转为8位二进制,高位补0

for i in range(0, len(int_ip), 8):
    x = int(int_ip[i : i + 8], 2)      #划分8位二进制并将其转为十进制
    int_ip2.append(str(x))

print(int(str_ip2, 2))   # 二进制转十进制
print(".".join(int_ip2)) 

输入IP转为十进制思路:
step1. 分割ip:输入ip为字符串,用ip.split(".")得str_ip=[‘10’,‘0’,‘3’,‘193’]
step2. 分段将十进制转换为8位二进制,高位补0,并拼接成字符串str_ip2: for i in str_ip: str_ip2 += "{:08b}".format(int(i))
step3. 二进制字符str_ip2串转成十进制:int(str_ip2, 2)

输入十进制转为IP思路:
step1. 十进制转为二进制:bin(nums),nums为int型,得到0b开头的二进制,提取由0和1组成的二进制字符串int_ip=bin(nums)[2::]
step2.将二进制字符串高位补0,使其长度为8的倍数:int_ip=int_ip.rjust(bu_len,'0'),bu_len为高位补0后应有的长度
step3. 分割以8为长度的二进制,并将其转为十进制:for i in range(0, len(int_ip), 8): int_ip2.append(str(int(int_ip[i : i + 8], 2))) step4. 拼接分段的十进制:".".join(int_ip2)

相关知识
Python 二进制转为十进制:int(binary,2),binary为二进制字符串
Python 十进制转为二进制:方法① bin(nums);方法②"{:8b}".format(nums),nums为int整型
Python 十进制转为8位二进制,且高位补0:"{:08b}".format(nums)
Python 十进制转为超8位二进制,且高位补0:str.rjust(len,sub)
Python 每隔n个字符串拆分字符串:使用切片和循环来拆分字符串,示例如下

s="HelloWorld"
n3
for i in range(0, len(s), n):
	res.append(s[i:i+n])
print(res)  # 输出 ['Hel', 'loW', 'orl', 'd']
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值