本文已参与「新人创作礼」活动,一起开启掘金创作之路。
题目来自牛客网的华为机试题库,本题目为简单题
HJ15 求int型正整数在内存中存储时1的个数
描述
输入一个 int 型的正整数,计算出该 int 型数据在内存中存储时 1 的个数。
数据范围:保证在 32 位整型数字范围内
输入描述:
输入一个整数(int类型)
输出描述:
这个数转换成2进制后,输出1的个数
示例1
输入:5
输出:2
n = int(input())
re = 0
while n > 0:
if n % 2 == 1:
re += 1
n -= 1
n = n // 2
print(re)
解析
用数学的思路有余数就是有1
HJ21 简单密码
描述
现在有一种密码变换算法。九键手机键盘上的数字与字母的对应: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,把密码中出现的小写字母都变成九键键盘对应的数字,如:a 变成 2,x 变成 9.而密码中出现的大写字母则变成小写之后往后移一位,如:X ,先变成小写,再往后移一位,变成了 y ,例外:Z 往后移是 a 。
数字和其它的符号都不做变换。
输入描述:
输入一组密码,长度不超过100个字符。
输出描述:
输出密码变换后的字符串
示例1
输入:YUANzhi1987
输出:zvbo9441987
我写的
s = input()
for i in s:
if i.isupper() and i != 'Z':
print(chr(ord(i.lower())+1),end='')
elif i.isupper() and i == 'Z':
print('a',end='')
elif i.islower():
if i in 'abc':
print(2,end='')
elif i in 'def':
print(3,end='')
elif i in 'ghi':
print(4,end='')
elif i in 'jkl':
print(5,end='')
elif i in 'mno':
print(6,end='')
elif i in 'pqrs':
print(7,end='')
elif i in 'tuv':
print(8,end='')
else:
print(9,end='')
else:
print(i,end='')
有经验的写的
s = input()
re = []
dic = ['2','2','2','3','3','3','4','4','4','5','5','5','6','6','6','7','7','7','7','8','8','8','9','9','9','9']
for i in range(len(s)):
if s[i] >='A' and s[i] < 'Z':
re.append(chr(ord(s[i].lower())+1))
elif s[i] == 'Z':
re.append('a')
elif s[i] >= 'a' and s[i] <= 'z':
re.append(dic[ord(s[i])-ord('a')])
else:
re.append(s[i])
print(''.join(re))
解析
有时候字典真的很好使啊