# 输入一个 int 型整数,按照从右向左的阅读顺序,返回一个不含重复数字的新的整数。 # 保证输入的整数最后一位不是 0 。 # 数据范围:1≤n≤10^8 # 输入描述: # 输入一个int型整数 # 输出描述: # 按照从右向左的阅读顺序,返回一个不含重复数字的新的整数 def func(num): while num % 10 == 0: # 若整数最后一位是0 num = int(num / 10) num_str_list = list(str(num))[::-1] if len(num_str_list) < 2: return int(num_str_list[0]) new_list = [num_str_list[0]] for i in range(1, len(num_str_list)): if num_str_list[i] in new_list: continue new_list.append(num_str_list[i]) new_num = int("".join(new_list)) return new_num # 将两个整型数组按照升序合并,并且过滤掉重复数组元素。 # 输出时相邻两数之间没有空格。 # 输入描述: # 输入说明,按下列顺序输入: # 1 输入第一个数组的个数 # 2 输入第一个数组的数值 # 3 输入第二个数组的个数 # 4 输入第二个数组的数值 # 输出描述: # 输出合并之后的数组 def merge(a, b): c = a + b c.sort() d = [] for i in range(len(c)): if c[i] not in d: d.append(c[i]) return "".join(map(str, d)) # 【两数之和绝对值最小】: # 给定一个从小到大的有序整数序列(存在正整数和负整数)数组 nums,请你在该数组中找出两个数,其和的绝对值(|nums[x]+nums[y]|)为最小值,并返回这个绝对值。 # 每种输入只会对一个答案。但是,数组中同一个元素不能使用两遍。 # 输入描述: # 一个通过空格分割的有序整数序列字符串,最多1000个整数,且整数数值范围是-65535~65535。 # 输出描述: # 两数之和绝对值最小值。 def min_abs(string): # 方法一:遍历 nums = string.split() nums2 = list(map(int, nums)) if len(nums) <= 2: return abs(sum(nums2)) nums2_pri = [] nums2_neg = [] for i in nums2: if i > 0: nums2_pri.append(i) else: nums2_neg.append(i) if len(nums2_neg) > 0 and len(nums2_pri) > 0: min_num = abs(int(nums[0]) + int(nums[1])) for i in range(len(nums) - 1): for j in range(i + 1, len(nums)): if abs(int(nums[i]) + int(nums[j])) < min_num: min_num = abs(int(nums[i]) + int(nums[j])) return min_num elif len(nums2_neg) > 0: tmp = max(nums2_neg) nums2_neg.remove(tmp) return abs(tmp + max(nums2_neg)) elif len(nums2_pri) > 0: tmp = min(nums2_pri) nums2_pri.remove(tmp) return abs(tmp + min(nums2_pri)) # 功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 ) # 数据范围:1≤n≤2×10^9+14 # 输入描述: # 输入一个整数 # 输出描述: # 按照从小到大的顺序输出它的所有质数的因子,以空格隔开。 import math def prime_factor(num): prime_num = list(range(2, int(math.sqrt(num)) + 1)) prime_list = [] num1 = num i = 0 while i < len(prime_num): if num1 % prime_num[i] == 0: prime_list.append(prime_num[i]) num1 = int(num1 / prime_num[i]) i = 0 else: i += 1 if len(prime_list) > 0: return prime_list else: return num # 给你一个整数数组 nums 和一个整数 k ,请你统计并返回 该数组中和为 k 的连续子数组的个数 。 def sumk(nums, k): cnt = 0 sum1 = 0 i = 0 left = 0 while i < len(nums): sum1 += nums[i] if sum1 == k: left += 1 cnt += 1 i = left sum1 = 0 elif sum1 > k: left += 1 i = left sum1 = 0 else: i += 1 return cnt # 双十一众多商品进行打折销售,小明想购买自己心仪的一些物品, 但由于购买资金限制,所以他决定从众多心仪商品中购买三件,而且想尽可能得花完资金。 # 现在请你设计一个程序,计算小明尽可能花费的最大资金数。 # 输入描述: # 输入第一行为一维整型数组m,数组长度小于100,数组元素记录单个商品的价格。单个商品价格小于1000。 # 输入第二行为购买资金的额度r,r<100000。 # 输入格式正确无需考虑输入错误情况 # 输出描述: # 输出为满足上述条件的最大花费额度 # 注意:如果不存在满足上述条件的商品请返回-1 def max_buy(nums, k): nums2 = sorted(nums) if sum(nums2[:3]) > k: return -1 rslt = [] for i in range(len(nums2)): tmp1 = nums2[i] for j in range(i + 1, len(nums2)): tmp2 = nums2[j] for l in range(j + 1, len(nums2)): sum1 = tmp1 + tmp2 + nums2[l] if sum1 == k: return sum1 if sum1 < k: rslt.append(sum1) break if len(rslt) < 1: return -1 return max(rslt) if __name__ == '__main__': print("第一题:") num = 9876673 print(func(num)) print("第二题:") a = [1, 2, 5] b = [-1, 0, 3, 2] print(merge(a, b)) print("第三题:") string3 = "-3 -1 5 7 11 15" print(min_abs(string3)) print("第四题:") num2 = 180 print(prime_factor(num2)) print("第五题:") nums = [1, 1, 1] nums2 = [1, 2, 3] print(sumk(nums, 2)) print(sumk(nums2, 3)) print("第六题:") nums = [23, 26, 36, 27] k = 78 print(max_buy(nums, k)) nums2 = [23, 30, 40] k2 = 26 print(max_buy(nums2, k2))
笔试题(十):整数数组处理及求质因子
于 2023-02-10 08:51:45 首次发布
文章包含多个编程算法题目,包括从右向左读取整数并移除重复数字、合并排序数组、求两数之和绝对值最小、输出整数的所有质因子以及计算连续子数组和为特定值的个数。此外,还有一个关于在有限资金内购买三件商品以最大化花费的问题。
摘要由CSDN通过智能技术生成