练习五十一:序列交换

有两个序列a,b,大小都为n,序列元素的值任意整形数,无序;

要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。

  1 def list_end(list1,list2):
  2     if len(list1) == len(list2):
  3         old_num = abs(sum(list1)-sum(list2))
  4         l = len(list1)
  5         x,y = 0,0
  6         flag = 1
  7         while flag:
  8             min_num = old_num
  9             while x < l:
 10                 while y < l:
 11                     list1[x],list2[y] = list2[y],list1[x] #先交换,在计算sum和的差值
 12                     temp = abs(sum(list1)-sum(list2))
 13                     if min_num > temp: #如果差值比原本的小
 14                         min_num = temp  #原本的就等于现在的
 15                     else:
 16                         list1[x],list2[y] = list2[y],list1[x]  #否则还原回去
 17                     y += 1
 18                 y = 0
 19                 x += 1
 20             if min_num == old_num:
 21                 flag = 0
 22         return list1,list2
 23     else:
 24         return ‘提供的列表必须长度相同‘
 25
 26 list1 = [99,98,89,12]
 27 list2 = [5,4,22,11]
 28 print(list_end(list1,list2))
 29 print(abs(sum(list1)-sum(list2)))

执行结果:

([4, 98, 89, 5], [99, 12, 22, 11])
52

原文地址:https://www.cnblogs.com/pinpin/p/10175290.html

时间: 2024-11-05 18:25:27

练习五十一:序列交换的相关文章

QT开发(五十一)——QtQuick基础

QT开发(五十一)--QtQuick基础 一.QtQuick简介 QT提供了两种独立的方法创建用户界面. QtQuick模块为创建流畅.鲜活的用户界面提供了一种标记语言.QtQuick模块适合需要动画元素的界面,以及应用程序主要运行在小屏幕和多点触控的设备上的场景. QtWidgets模块针对传统桌面提供了更多的支持,和目标平台做了更多的集成,无论目标平台是MacOSX.Windows.KDE.GNome.QtWidgets是一个非常高效的基于C++的类库,包含很多常见的用户界面组件,可以非常容

4、 序列交换--全国模拟(四)

[编程题] 序列交换 时间限制:1秒 空间限制:32768K 牛牛有一个长度为n的整数序列s,羊羊要在牛牛的序列中选择不同的两个位置,然后交换这两个位置上的元素.现在需要求出羊羊交换后可以得到的不同的序列个数.(注意被交换的两元素值可能相同). 如序列{1, 47},输出1.羊羊必须交换仅有的两个元素,得到序列{47, 1}.羊羊必须交换,不能保留原有的序列. {1, 2, 1},输出3.羊羊通过交换可以得到{2, 1, 1},{1, 1, 2},{1, 2, 1}这三个序列. 输入描述: 输入

五十一、php-fpm的pool、php-fpm慢执行日志、open_basedir、php-fpm

五十一.php-fpm的pool.php-fpm慢执行日志.open_basedir.php-fpm进程管理 一.php-fpm的pool pool:右侧.ps aux最右侧的那一列.就是它的池子. # cd /usr/local/php-fpm/etc # cat php-fpm.conf    //支持定义多个池子 [global] pid = /usr/local/php-fpm/var/run/php-fpm.pid error_log = /usr/local/php-fpm/var/

LeetCode开心刷题五十一天——118. Pascal&#39;s Triangle 接触跳转表概念,不知用处 lamda逗号导致表达式加法奇怪不理解119. Pascal&#39;s Triangle II

118. Pascal's Triangle Easy 87984FavoriteShare Given a non-negative integer numRows, generate the first numRows of Pascal's triangle. In Pascal's triangle, each number is the sum of the two numbers directly above it. Example: Input: 5 Output: [ [1],

第五十一题 和为n 连续正数序列

51.和为n 连续正数序列. 题目:输入一个正数n,输出所有和为n 连续正数序列. 例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以输出3 个连续序列1-5.4-6 和7-8. 代码如下: public static void findSeqSum(int sum) { int begin=1,end=2,mid=sum/2,curSum=begin+end; while(begin<mid) { if(curSum==sum) { for(int i=begin;i<=e

shell学习五十一天----top命令查看进程列表

top命令查看进程列表 top命令是linux下常用的性能分析工具,能实时显示系统中各个进程的资源占用状况.和win的资源管理器类似.top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态,如果在前台执行该命令,它将独占前台,知道用户终止该程序为止.比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最"敏感"的任务列表.该命令可以按CPU使用,内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互命令或者在个人定制文件中进行设定. t

SQL基础学习笔记(五)—序列、索引、同义词

常见的数据库对象 表:基本的数据存储集合,由行和列组成 视图:从表中抽出逻辑上相关的数据集合 序列:提供有规律的数值 索引:提高查询效率 同义词:给对象起别名 (索引和同义词了解即可) 序列sequences 可供多个用户用来产生唯一数值的数据库对象 自动提供唯一的数值 共享对象 主要用于提供主键值 将序列值装入内存可以提高访问效率 如何和创建序列 CREATE SEQUENCE sequence [INCREMENT BY n] --每次增长的数值 [START WITH n] --从哪个值开

C#编程(五十一)----------链表

原文链接: http://blog.csdn.net/shanyongxu/article/details/47024865 链表 LinkedList<T>集合类没有非泛型类的版本,它是一个双向链表,他的元素指向元素的前一个与后一个元素. 链表的有点事:如果要插入一个元素到链表的中间位置,效率很高,因为如果插入一个元素,只需要修改上一个元素的Next与下一个元素的Previous的引用即可. 链表的缺点是,链表只能是一个接着一个访问,这样就要用更长的时间来查找定位位于链表中间的元素. Lin

第五章 序列:字符串、列表和元组

5.1 序列类型操作符 seq[ind]:获得下标为ind的元素 seq[ind1:ind2]:获得下标ind1到ind2间的元素集合,不能获得seq[ind2]的值 seq*expr:序列重复expr次 seq1+seq2:连接序列1和序列2 obj in seq:判断obj元素是否包含在序列中 obj not in seq:判断obj元素是否不包含在序列中 例题一 例题二 翻转和隔一个取一个 例题三 5.2 只能适用字符串的操作符 %c:转换成字符 %r:优先使用repr()函数进行转换 %