~欢迎进来我的博客~蛋叔的小乖乖~

面试总结--代码题

1.随机输入一个字符串,如a=asadagddsaahsss,请输出a5  d3  g1  h1  s5

分析:

第一步:用python中的collections模块的counter方法来统计出每个字母的个数,输出结果为字典格式的数据

import collections

a='asadagddsaahsss'

print(collections.counter(a)

第二步:将数据进行排序

a='asadagddsaahsss'

b=dict(collections.counter(a)

for i in sorted(b):

第三步:拼接键和值,输出显示符合要求的格式

print(str(i)+str(b[i]),end=""+"  ")

ps:i:字典的键   b[i]:字典的值     end="":一行显示打印结果

2.输入n个空格分割的n个整数,n不超过100,输出整数出现次数大于等于n/2的数

 

import collections
a=[3,3,3,3,3,5,4,6,7,6,3,3,3,3,3,8]
b=dict(collections.Counter(a))
for i in b.values():
if i>int(len(a)/2):
print(list(b.keys())[list(b.values()).index(i)])

 

import collections
import random
a=random.sample([i for i in range(1,101)],random.choice([i for i in range(1,100)]))
b=dict(collections.Counter(a))
print(b)
for i in b.values():
if i>int(len(a)/2):
print(list(b.keys())[list(b.values()).index(i)])

 

from collections import Counter
c = Counter(list(map(int, input().split())))
print(c.most_common(1)[0][0])

 方法解析:

from collections import Counter
a='1 3 4 3 5 3 6 7 8 3 3'
print(a) # 1 3 4 3 5 3 6 7 8 3 3
b=a.split()
print(b) #['1', '3', '4', '3', '5', '3', '6', '7', '8', '3', '3']
d=map(int,b)
print(d) #<map object at 0x0000000002502908>
e=list(d)
print(e) #[1, 3, 4, 3, 5, 3, 6, 7, 8, 3, 3]
c= Counter(e)
print(c) #Counter({3: 5, 1: 1, 4: 1, 5: 1, 6: 1, 7: 1, 8: 1})
f=c.most_common(1)
print(f) #[(3, 5)]
g=f[0]
print(g) #(3, 5)
h=g[0]
print(h) #3
1.split():根据空格将字符串切分成列表
2.map的意思就是对b中的每一个元素都用int来作用一下,返回的是一个迭代器,其实还是一串数,将字符串数据类型转换成int整数类型,但需要用列表强制转换一下
3.list():用list 强制转换
4.Counter():collections模块的counter统计方法:统计出现次数,进行倒叙排序
用法:
a.如果直接调用模块import collections,代码块实例化时直接:
collections.Counter()进行使用
b.如果调用方法,from collections import Counter,代码块实例化时直接:
Counter()进行使用
5.most_common(1):提取字典的第一个元素
6.[0]:索引下标位置为0的数据


3.给定一个包含大写英文字母和数字的句子,找出这个句子所包含的最大的十六进制整数,返回这个整数的值。数据保证该整数在int表示范围内

212个
4.写一个冒泡排序
思路:冒泡排序的逻辑是,一组数中,从左第一个位置的数进行和后面的数进行两两比较大小,相邻的大的排后,再进行和后面位置的值进行比较,依次类推,确定好这组数中最大的数
定义一个函数,冒泡排序,参数为一个数组
def bubblerSort(arr):
  n=len(arr)
  for i in range(n)://i遍历数组的每个元素,i从0到n-1,第一次遍历时,i=0,遍历后,确定了排序的最后一个数,也就是最大的数
    for j in range(n-i-1)://j嵌套循环,j从0到n-1-i,第二次遍历,j=n-0-1,需要排序的数组总数少1个,因为最后一个最大数已经确定,不需要再遍历;遍历后i=1
      if arr[j]>arr[j+1]://确定这组数中,最大,次大,次次大的数,即就是确定排最后一位,倒数第二位,倒数第三位.....的数,相邻数据两两比较,大的排后,再进行比较。,依次类推的过程
        arr[j],arr[j+1]=arr[j+1],arr[j]//符合判断条件后,进行换位置,此写法是python中两个数值互换的固定写法

arr=[12,32,21,11,1,2,32,11,234,2]

bubblerSort(arr)//调用函数方法
for i in range(len(arr))://遍历数组的每个元素
  print(arr[i],end=' ')//打印结果,end=''代表不换行打印,如果要间隔空格,‘’中间打个空格

5.写一个插入排序
def insertSort(arr)://定义一个函数方法,参数为一个数组
  for i in range(1,len(arr))://从第二个位置的元素开始遍历,遍历到最后一个元素
  key=arr[i]//当前遍历次数的值
  j=i-1//向前进行遍历
  while j>=0 and key<arr[j]://当前遍历到的数值 和 前一个位置上的数值进行比较大小
    arr[j+1]=arr[j]//当前遍历到的数值  小于 前一个位置上的数值的话,将前一个位置上的数值赋值给 新生成的 数组中后一个位置上的数值
    j -= 1//再将上面比较大的数值,往前推一个位置上的数值进行比较大小,再次循环操作,把较大的值赋给后一个位置上元素的值
  arr[j+1]=key//一直往前比较后,没有比它再大的数的话,将最初比较最小的值 赋予 最前位置的元素

arr=[22,12,11,21,33,3,2,10,6,8,4]
insertionSort(arr)
for i in range(len(arr)):
  print(arr[i],end=' ')

6.abcd*e=dcba,a!=0 and e!=0 and e!=1,求abcd (ps:水花仙数)
for e in range(2,10):
  for a in range(1,10):
    for b in range(0,10):
      for c in range(0,10):
        for d in range(0,10):
          if ((a*1000+b*100+c*10+d)*e == d*1000+c*100+b*10+a)):
            print('a=',{0}.format(a))
            print('b=',{0}.format(b))
            print('c=',{0}.format(c))
            print('d=',{0}.format(d))
            print('e=',e)
            print('{0}{1}{2}{3}*'+str(e)+'={3}{2}{1}{0}'.format(a,b,c,d))



7.不死神兔

8.汉诺塔

9.乘法表:
1*1=1
2*1=2 2*2=4
3*1=3 3*2=3 3*3=9
.......
.......
分析:一个变量进行控制乘法表每行的固定乘数值,即第一行为1和任意数的乘积,第二行为2和任意数的乘积,第三行为3和任意数的乘积......
第二个变量控制这个任意数,即每行的变量乘数值,即[1,10]//1~9的数
for i in range(1,10)://每行的固定乘数
  for j in range(1,i+1)://每行的变量乘数
    print("%d*%d=%d"(i,j,i*j),end=' ')//%d:格式化数据的作用,"%d*%d=%d"(i,j,i*j)意思是:括号中的三个变量赋予前面的数据格式中进行输出,end=‘ ’:同一行显示,中间用空格 隔开
print('')//打印时进行换行
posted @ 2020-03-17 18:02  qq的天马行空  阅读(179)  评论(0)    收藏  举报
蛋叔的小乖乖