华为在线机试训练Python答案6-10题

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

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

详细描述:


函数接口说明:

public String getResult(long ulDataInput)

输入参数:

long ulDataInput:输入的正整数

返回值:

String

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

输出描述:
按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。

示例1
输入

180
输出

2 2 3 3 5

思路:

1.每找出一个因子就除以这个因子,进行一个循环。

2. 注意相同因子的时候的处理。

input_Num = int(input())
def test(n):
    if n == 0 or n == 1 or n == 2:
        print(str(n) + ' ')
    staNum = 2
    li = []
    while staNum <= n:
        if n % staNum == 0:
            li.append(staNum)
            n = n // staNum 
            staNum = 2
            continue
        staNum += 1
    print(' '.join(str(i) for i in li) + ' ')
test(input_Num)
            

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

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

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

示例1
输入

5.5
输出

6

思路:

1. 本来Python有函数比如四舍五入round()、向上取整math.ceil()、向下取整math.floor();但是round有问题,有时候不会严格四舍五入;

2. 只有转成字符串,分别取整数和小数部分,然后把小数部分的第一个数字进行是否大于5的判断;

3. 最后再把整数部分进1或者保留;

即,关键是转成字符串形式再操作。

input_num = float(input())
def test(n):
    int_part = str(n).split('.')[0]
    flo_part = str(n).split('.')[1]
    if int(flo_part[0]) >= 5:
        res = int(int_part) + 1
        print(res)
    else:
        print(int_part)
test(input_num)

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

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

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

示例1
输入

4
0 1
0 2
1 2
3 4
输出

0 3
1 2
3 4

思路:

考查字典的相关用法。

1. 先取一个空字典,然后循环+条件判断。

2. 如果key不在里面,则放入value与其对应;

3. 如果在里面,则把要放入的value和之前的value进行相加即可;

num = int(input())
def test(n):
    dict = {}
    for i in range(n):
        k, v = input().split(' ')   # 新的技法,避免了两行来输入赋值
        k = int(k)
        v = int(v)
        if k not in dict:
            dict[k] = v
        else:
            dict[k] += v
    for k, v in dict.items():
        print(k,v) # 新技法,避免了用print(str(k) + ' ' + str(v))
test(num)

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

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

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

示例1
输入

9876673
输出

37689

思路:

1.利用上一题字典为空,循环+条件的思想;

2. 此处换成字典,并且利用到了字典的切片操作;

num = str(input())
li = []
for i in num[::-1]: # 左右往左,倒回来读
    if i not in li: # 利用了上一道题的思想
        li.append(i)
    else:
        continue
print(''.join(li)) # join可以对列表、元组、字典、字符串以指定的字符连接生成一个新的字符串
    

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

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

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

示例1
输入

abc
输出

3

思路:

还是刚才那到题的思想。

input_char = str(input())
li = []
for i in input_char:
    if i not in li:
        li.append(i)
    else:
        continue
print(len(li))

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值