科大讯飞2021届算法工程师提前批笔试题

科大讯飞2021届算法工程师提前批三道笔试题
前提
题目要求必须用c++来进行编译,但是科大讯飞的题目我最终是用python的本地IDE编译出来的,既然参加了可不能浪费这次宝贵的学习机会,这里手动狗头。^^。在这里只给我自己对这些题目的解题方法,大家有什么疑问或者建议或者什么的可以在评论区提出来。
题目
在这里插入图片描述
思路:首先分析题目得到几个关键点

  1. 输入描述为无,那么没有其他输入了,只需要对题目中给出的几个点进行拟合就可以。
  2. 需要利用到均方误差的公式。
  3. 输出的形式是包含一位小数,想到如果按照range进行遍历的话,那么出来的都只会是整数,不能够满足要求。
import time
if __name__ == "__main__":
	start = time.time()   ##这里是为了满足题目中的条件,
	min = 10**4
	list1 = [i / 10 for i in range(1,100)]   ##区间在[0,10],从0.1开始扩增
	for a in list1:
	    for b in list1:
	        loss_fuc = ((a+b-6)**2 +(2*a+b-5)**2 +(3*a+b-7)**2 +(4*a+b-10)**2)/4 ##这里可以看成是损失函数,将数值代入到均方误差的公式中
	
	###比较大小,遇到更小的就赋值给min
	        if loss_fuc < min:
	            print(fuc)
	            c = a
	            d = b
	            min = loss_fuc
  ###
	print('c={}'.format(c))
	print('d={}'.format(c))
	end = time.time()
	print(end-start)

在这里插入图片描述

思路
本题从字符串的中间出发,按照字符串的长度为奇数或者偶数来分析。通过保留符合要求的字符,最后相减得到本题中需要删除的子字符串的个数。

  1. 如果字符串的长度是奇数,计数器从1开始,从中间出发,如果遇到不对称的字符那么直接退出循环;如果遇到对称的字符,那么计数器加2,继续执行循环。
  2. 如果字符串的长度是偶数,计数器从0开始,同理可得。
if __name__ == "__main__":
    s = input()
    n = len(s)
    if n%2 ==0:
        count = 0
        for i in range(int(n/2),n):
            if s[i] == s[n-1-i]:
                count +=2
            else:
                count +=0
                break
    else:
        count = 1
        for j in range(int(n/2)+1,n):
            if s[j] == s[n-1-j]:
                count +=2
            else:
                count +=0
                break
    del_len = n - count
    print(del_len)
    

在这里插入图片描述

第三道暂时没想到什么合适的解法,如果有大佬有不错的方法,也可以在下面提出来,欢迎补充!

猜你喜欢

转载自blog.csdn.net/weixin_43800002/article/details/107716079
今日推荐