华为2019校招实习笔试-软件题

1、给你一个原始字符串,根据该字符串内每个字符出现的次数,按照ASCII码递增顺序重新调整输出。

举例!假设原始字符串为:
eeefgghhh
则每种字符出现的次数分别是:
(1).eee        3次
(2).f          1次
(3).gg         2次
(4).hhh        3次
重排输出后的字符串如下:
efghegheh

编写程序,实现上述功能。

【温馨提示】
(1).原始字符串中仅可能出现“数字”和“字母”;

(2).请注意区分字母大小写。

import sys
#a='eeefgghhhA0'
a=sys.stdin.readline().strip()
if a.isalnum()!=True:
    exit

d={}
l=[]
for i in range(len(a)):
    if a[i] not in d:
        d[a[i]]=1
        l.append(a[i])
    else:
        d[a[i]]=d[a[i]]+1


maxnum=0
l2=[]
for j in range(len(l)):
    l2.append(d[sorted(l)[j]])
maxnum=sorted(l2)[-1]    

c=''
for m in range(maxnum):
    for n in range(len(l)):
        if d[sorted(l)[n]]==0:
            continue
        else:
            c=c+sorted(l)[n]
            d[sorted(l)[n]]-=1
                                    
print c


2、题目描述

给出一组正整数,你从第一个数向最后一个数方向跳跃,每次至少跳跃1格,每个数的值表示你从这个位置可以跳跃的最大长度。计算如何以最少的跳跃次数跳到最后一个数。

输入描述:
第一行表示有多少个数n
第二行开始依次是1到n个数,一个数一行
输出描述:
输出一行,表示最少跳跃的次数。

示例1
输入
7
2
3
2
1
2
1
5
输出

3

n=7
l1=[2,3,2,1,2,1,5]
count=0
flag=True
i=0
while flag:
    print i#表示当前位置
    l2=[]
    maxnum=0
    for j in range(1,l1[i]+1):
        if (i+j)<len(l1):
            if maxnum<=l1[i+j]:
                maxnum=l1[i+j]
            l2.append(l1[i+j])
            
    m=0
    for index,value in enumerate(l2):#这个函数可以知道列表的索引和值
        if maxnum==value:
            if m<index:
                m=index
    i=i+m+1
         
         
    if i>=len(l1)-1:
        flag=False
    count+=1           
print count
        
3、输入描述:
第一行输入数字A的字符串,字符范围(0~9),第二行输入数字B的字符串,字符范围(0~9)。
输出描述:

输出A、B俩数相乘的结果,结果为字符串。

示例1
输入
1234
4321
输出

5332114

import sys
a = sys.stdin.readline().strip()
b = sys.stdin.readline().strip()
return str(int(a)*int(b))



猜你喜欢

转载自blog.csdn.net/petoilej/article/details/79931219