牛客-华为机试刷题录(持续更新)

1 质数因子

题目

功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(如180的质因子为2 2 3 3 5 )

最后一个数后面也要有空格

详细描述:


函数接口说明:

public String getResult(long ulDataInput)

输入参数:

long ulDataInput:输入的正整数

返回值:

String

解答

a, res = int(input()), []
for i in range(2, a // 2 + 1):
    while a % i == 0:
        a = a / i
        res.append(i)
print(" ".join(map(str, res)) + " " if res else str(a) + " " )
2 取近似值

题目

写出一个程序,接受一个正浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整。

输入描述:
输入一个正浮点数值

输出描述:
输出该数值的近似整数值

解答

a = input()
b = a.split('.')
print( int(b[0])+1 if int(b[-1][0]) >= 5 else int(b[0]) )
3 合并表记录

题目

数据表记录包含表索引和数值(int范围的整数),请对表索引相同的记录进行合并,即将相同索引的数值进行求和运算,输出按照key值升序进行输出。

输入描述:
先输入键值对的个数
然后输入成对的index和value值,以空格隔开

输出描述:
输出合并后的键值对(多行)

解答

num = int(input())
dictvar = {}
for i in range(num):
    k, v = [j for j in map(int, input().split(' '))]
    dictvar[k] = dictvar.setdefault(k, 0) + v
for k, v in dictvar.items():
    print(k, v)
4 提取不重复的整数

题目

输入一个int型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。

输入描述:
输入一个int型整数

输出描述:
按照从右向左的阅读顺序,返回一个不含重复数字的新的整数

解答

num = input()
num = num[::-1]
lst = list(set(num))
lst.sort(key=num.index)
print(''.join(lst))
5 字符个数统计

题目

编写一个函数,计算字符串中含有的不同字符的个数。字符在ACSII码范围内(0~127),换行表示结束符,不算在字符里。不在范围内的不作统计。

输入描述:
输入N个字符,字符在ACSII码范围内。

输出描述:
输出范围在(0~127)字符的个数。

解答

char = input()
setvar = set(char)
print(len(setvar))
6 句子逆序

题目

将一个英文语句以单词为单位逆序排放。例如“I am a boy”,逆序排放后为“boy a am I”
所有单词之间用一个空格隔开,语句中除了英文字母外,不再包含其他字符


接口说明

/**
 * 反转句子
 * 
 * @param sentence 原句子
 * @return 反转后的句子
 */
public String reverse(String sentence);

解答

chars = input()
lst = chars.split(" ")
lst = lst[::-1]
print(" ".join(lst))
7 字符串连接最长路径查找

题目

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

解答

num = int(input())
lst = []
for i in range(num):
    lst.append(input())
lst.sort()
for i in lst:
    print(i)
8 求int型正整数在内存中存储1时的个数

题目

输入一个int型的正整数,计算出该int型数据在内存中存储时1的个数。

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

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

解答

num = str(bin(int(input())))
res = 0
for i in num:
    if i == '1':
        res += 1
print(res)
9 坐标移动

题目

开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。

输入:

合法坐标为A(或者D或者W或者S) + 数字(两位以内)

坐标之间以;分隔。

非法坐标点需要进行丢弃。如AA10;  A1A;  $%$;  YAD; 等。

下面是一个简单的例子 如:

A10;S20;W10;D30;X;A1A;B10A11;;A10;

处理过程:

起点(0,0)

+   A10   =  (-10,0)

+   S20   =  (-10,-20)

+   W10  =  (-10,-10)

+   D30  =  (20,-10)

+   x    =  无效

+   A1A   =  无效

+   B10A11   =  无效

+  一个空 不影响

+   A10  =  (10,-10)

结果 (10, -10)

注意请处理多组输入输出

输入描述:
一行字符串

输出描述:
最终坐标,以,分隔

解答

while 1:
    try:
        strvar = input()
        lstvar = strvar.split(';')
        num1 = 0
        num2 = 0
        dictvar = {A: -1, D: 1, W: 1, S: -1}
        for i in lstvar:
            if i[0] in [A, D] and (i[1:]).isdigit() and len(i) <= 3:
                num1 += dictvar[i[0]]*int(i[1:])
            elif i[0] in [W, S] and (i[1:]).isdigit() and len(i) <= 3:
                num2 += dictvar[i[0]]*int(i[1:])
            else:
                continue
        print('num1'+','+'num2')
    except:
        break
10 简单密码

题目

密码是我们生活中非常重要的东东,我们的那么一点不能说的秘密就全靠它了。哇哈哈. 接下来渊子要在密码之上再加一套密码,虽然简单但也安全。

 

假设渊子原来一个BBS上的密码为zvbo9441987,为了方便记忆,他通过一种算法把这个密码变换成YUANzhi1987,这个密码是他的名字和出生年份,怎么忘都忘不了,而且可以明目张胆地放在显眼的地方而不被别人知道真正的密码。

 

他是这么变换的,大家都知道手机上的字母: 1--1, abc--2, def--3, ghi--4, jkl--5, mno--6, pqrs--7, tuv--8 wxyz--9, 0--0,就这么简单,渊子把密码中出现的小写字母都变成对应的数字,数字和其他的符号都不做变换,

 

声明:密码中没有空格,而密码中出现的大写字母则变成小写之后往后移一位,如:X,先变成小写,再往后移一位,不就是y了嘛,简单吧。记住,z往后移是a哦。


输入描述:
输入包括多个测试数据。输入是一个明文,密码长度不超过100个字符,输入直到文件结尾

输出描述:
输出渊子真正的密文

示例1
输入
复制
YUANzhi1987
输出
复制
zvbo9441987

解答

while 1:
    in_pass = input()
    strvar1 = 'abcdefghijklmnopqrstuvwxyz'
    strvar2 = '2'*3+'3'*3+'4'*3+'5'*3+'6'*3+'7'*4+'8'*3+'9'*4
    dictvar = dict(zip(strvar1, strvar2))
    lstvar = []
    for i in in_pass:
        if 'A' <= i < 'Z':
            lstvar.append(chr(ord(i)+33))
        elif i == 'Z':
            lstvar.append('a')
        elif 'a' <= i <= 'z':
            lstvar.append(dictvar[i])
        else:
            lstvar.append(i)
    strvar3 = ''.join(lstvar)
    print(strvar3)
11 汽水瓶

题目

有这样一道智力题:“某商店规定:三个空汽水瓶可以换一瓶汽水。小张手上有十个空汽水瓶,她最多可以换多少瓶汽水喝?”答案是5瓶,方法如下:先用9个空瓶子换3瓶汽水,喝掉3瓶满的,喝完以后4个空瓶子,用3个再换一瓶,喝掉这瓶满的,这时候剩2个空瓶子。然后你让老板先借给你一瓶汽水,喝掉这瓶满的,喝完以后用3个空瓶子换一瓶满的还给老板。如果小张手上有n个空汽水瓶,最多可以换多少瓶汽水喝? 
输入描述:
输入文件最多包含10组测试数据,每个数据占一行,仅包含一个正整数n(1<=n<=100),表示小张手上的空汽水瓶数。n=0表示输入结束,你的程序不应当处理这一行。

输出描述:
对于每组测试数据,输出一行,表示最多可以喝的汽水瓶数。如果一瓶也喝不到,输出0。

示例1
输入
复制
3
10
81
0
输出
复制
1
5
40

解答

while 1:
    try:
        a = int(input())
        if a != 0:
            print(a//2)
    except:
        break
12 删除字符串中出现次数最少的字符

题目

题目描述
实现删除字符串中出现次数最少的字符,若多个字符出现次数一样,则都删除。输出删除这些单词后的字符串,字符串中其它字符保持原来的顺序。
注意每个输入文件有多组输入,即多个字符串用回车隔开
输入描述:
字符串只包含小写英文字母, 不考虑非法输入,输入的字符串长度小于等于20个字节。

输出描述:
删除字符串中出现次数最少的字符后的字符串。

示例1
输入
复制
abcdd
输出
复制
dd

解答

while 1:
    try:
        inc = input()
        lst1 = []
        for i in inc:
            lst1.append(inc.count(i))
        min_c = min(lst1)
        outc = ''
        for i in inc:
            if inc.count(i) != min_c:
                outc += i
        print(outc)
    except:
        break
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值