<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="zh-cn">
		<id>http://wiki.tomtalk.net/index.php?action=history&amp;feed=atom&amp;title=Android</id>
		<title>Android - 版本历史</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.tomtalk.net/index.php?action=history&amp;feed=atom&amp;title=Android"/>
		<link rel="alternate" type="text/html" href="http://wiki.tomtalk.net/index.php?title=Android&amp;action=history"/>
		<updated>2026-04-24T02:41:23Z</updated>
		<subtitle>本wiki的该页面的版本历史</subtitle>
		<generator>MediaWiki 1.24.2</generator>

	<entry>
		<id>http://wiki.tomtalk.net/index.php?title=Android&amp;diff=4347&amp;oldid=prev</id>
		<title>2015年7月14日 (二) 16:19 Tom</title>
		<link rel="alternate" type="text/html" href="http://wiki.tomtalk.net/index.php?title=Android&amp;diff=4347&amp;oldid=prev"/>
				<updated>2015-07-14T16:19:24Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;新页面&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;div id=&amp;quot;indexContent&amp;quot;&amp;gt;&lt;br /&gt;
[[android教程]] [[UI]]&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==笔记==&lt;br /&gt;
&lt;br /&gt;
http://code.metager.de/source/xref/android/ android源码&lt;br /&gt;
&lt;br /&gt;
[http://edu.51cto.com/course/course_id-702-page-1.html Android应用开发视频教程-第1季]&lt;br /&gt;
&lt;br /&gt;
[http://edu.51cto.com/course/course_id-1150.html Android应用开发视频教程-第2季]&lt;br /&gt;
&lt;br /&gt;
https://code.google.com/p/android-json-rpc/&lt;br /&gt;
&lt;br /&gt;
https://code.google.com/p/android-shuffle/&lt;br /&gt;
&lt;br /&gt;
https://github.com/stephanenicolas/robospice&lt;br /&gt;
&lt;br /&gt;
https://github.com/47deg/android-swipelistview&lt;br /&gt;
&lt;br /&gt;
http://techmeme.com/&lt;br /&gt;
&lt;br /&gt;
Android的知识结构（源代码方面）：&lt;br /&gt;
# Linux操作系统知识&lt;br /&gt;
# Linux内核知识（C语言）&lt;br /&gt;
# Linux驱动程序知识（C语言）&lt;br /&gt;
# Android底层库（C语言、C++）&lt;br /&gt;
# Dalvik虚拟机（C++、JAVA）&lt;br /&gt;
# Android GUI系统（C++、JAVA）&lt;br /&gt;
# 音频、视频和多媒体（C语言、C++、JAVA）&lt;br /&gt;
# 电话部分的（C语言、C++、JAVA）&lt;br /&gt;
# 连接部分（C语言、C++、JAVA）&lt;br /&gt;
# 传感器部分（C语言、C++、JAVA）&lt;br /&gt;
&lt;br /&gt;
Android的知识结构（SDK方面）：&lt;br /&gt;
# JAVA语言知识&lt;br /&gt;
# 应用程序架构&lt;br /&gt;
# GUI设计基础知识&lt;br /&gt;
# 各种视图的使用&lt;br /&gt;
# 2D/3D图形API&lt;br /&gt;
# 应用程序的设计思想&lt;br /&gt;
&lt;br /&gt;
Android的开发分成三种类型：&lt;br /&gt;
1. 移植开发手机系统&lt;br /&gt;
2. 应用程序开发&lt;br /&gt;
3. Android系统开发&lt;br /&gt;
&lt;br /&gt;
Android是包括一个操作系统、中间件和关键应用的移动设备的一个软件堆。&lt;br /&gt;
&lt;br /&gt;
==Android开发环境搭建==&lt;br /&gt;
&lt;br /&gt;
http://hi.baidu.com/wlj1013/item/3e6080351168b9302f0f815c&lt;br /&gt;
&lt;br /&gt;
==Eclipse快捷键==&lt;br /&gt;
&lt;br /&gt;
http://www.jb51.net/article/32603.htm&lt;br /&gt;
&lt;br /&gt;
Ctrl + 1  快速修复错误&lt;br /&gt;
Ctrl + Shift + O 自动补全引用类&lt;br /&gt;
&lt;br /&gt;
==精通android==&lt;br /&gt;
&amp;lt;table&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&amp;lt;td width=&amp;quot;400&amp;quot;&amp;gt;&lt;br /&gt;
[[PA01]] Android计算机平台简介&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA02]] 设置开发环境&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA03]] 使用Android资源&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA04]] ContentProvider&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA05]] Intent&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA06]] 建构用户界面和使用控件&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA07]] 使用菜单&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA08]] 使用对话框&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA09]] 管理和组织首选项&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA10]] 探索安全性和权限&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA11]] 构建和使用服务&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA12]] 包&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA13]] 处理程序&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA14]] 广播接收程序和长期运行的服务&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA15]] 闹钟管理器&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA16]] 2D动画揭秘&lt;br /&gt;
&amp;lt;/td&amp;gt; &amp;lt;td&amp;gt;&lt;br /&gt;
[[PA17]] 地图和基于位置的服务&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA18]] 电话API&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA19]] 媒体框架&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA20]] 使用OpenGL进行3D图形编程&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA21]] 活动文件夹&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA22]] 主屏幕部件&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA23]] Android搜索&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA24]] 文本到语音转换&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA25]] 触摸屏幕&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA26]] 传感器&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA27]] 联系人API&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA28]] 使用Android Market&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA29]] 多用途的碎片&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA30]] ActionBar&amp;lt;br&amp;gt;&lt;br /&gt;
[[PA31]] 3.0版本中的更多主题&amp;lt;br&amp;gt;&lt;br /&gt;
EOF&lt;br /&gt;
&amp;lt;/td&amp;gt;&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==bookmarks==&lt;br /&gt;
* [http://blog.csdn.net/hstar00004/article/details/7186974 Android 15本经典教程和150多个实例源码 - Android 砖家 - 博客频道 - CSDN.NET]&lt;br /&gt;
* [http://blog.csdn.net/moreevan/article/details/7200079 八款开源 Android 游戏引擎 - KevinJom的专栏 - 博客频道 - CSDN.NET]&lt;br /&gt;
* [http://blog.csdn.net/xxm137164869/article/details/7218171 Android王国的游廊 - xxm137164869的专栏 - 博客频道 - CSDN.NET]&lt;br /&gt;
&lt;br /&gt;
==Android概念题==&lt;br /&gt;
&lt;br /&gt;
1. int 和 Integer 有什么区别&lt;br /&gt;
&lt;br /&gt;
Java 提供两种不同的类型：引用类型和原始类型(或内置类型)。int是java的原始数据类型，Integer是java为int提供的封装类。Java为每个原始类型提供了封装类。&lt;br /&gt;
&lt;br /&gt;
原始类型封装类&lt;br /&gt;
&lt;br /&gt;
boolean-Boolean、char-Character、byte-Byte、short-Short、int-Integer、long-Long、float-Float、double-Double&lt;br /&gt;
&lt;br /&gt;
引用类型和原始类型的行为完全不同，并且它们具有不同的语义。引用类型和原始类型具有不同的特征和用法，它们包括：大小和速度问题，这种类型以哪种类型的数据结构存储，当引用类型和原始类型用作某个类的实例数据时所指定的缺省值。对象引用实例变量的缺省值为 null，而原始类型实例变量的缺省值与它们的类型有关。&lt;br /&gt;
&lt;br /&gt;
2. final, finally, finalize的区别。&lt;br /&gt;
&lt;br /&gt;
final 用于声明属性，方法和类，分别表示属性不可变，方法不可覆盖，类不可继承。&lt;br /&gt;
&lt;br /&gt;
finally是异常处理语句结构的一部分，表示总是执行。&lt;br /&gt;
&lt;br /&gt;
finalize是Object类的一个方法，在垃圾收集器执行的时候会调用被回收对象的此方法，可以覆盖此方法提供垃圾收集时的其他资源回收，例如关闭文件等。&lt;br /&gt;
&lt;br /&gt;
3. Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?&lt;br /&gt;
&lt;br /&gt;
方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现，重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数，我们说该方法被重写 (Overriding)。子类的对象使用这个方法时，将调用子类中的定义，对它而言，父类中的定义如同被&amp;quot;屏蔽&amp;quot;了。如果在一个类中定义了多个同名的方法，它们或有不同的参数个数或有不同的参数类型，则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。&lt;br /&gt;
&lt;br /&gt;
4. 运行时异常与一般异常有何异同?&lt;br /&gt;
&lt;br /&gt;
异常表示程序运行过程中可能出现的非正常状态，运行时异常表示虚拟机的通常操作中可能遇到的异常，是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常，但是并不要求必须声明抛出未被捕获的运行时异常。&lt;br /&gt;
&lt;br /&gt;
5. 垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?&lt;br /&gt;
&lt;br /&gt;
对于GC来说，当程序员创建对象时，GC就开始监控这个对象的地址、大小以及使用情况。通常，GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是&amp;quot;可达的&amp;quot;，哪些对象是&amp;quot;不可达的&amp;quot;。当GC确定一些对象为&amp;quot;不可达&amp;quot;时，GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc()，通知GC运行，但是Java语言规范并不保证GC一定会执行。&lt;br /&gt;
&lt;br /&gt;
6. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?&lt;br /&gt;
&lt;br /&gt;
多线程有两种实现方法，分别是继承Thread类与实现Runnable接口&lt;br /&gt;
&lt;br /&gt;
同步的实现方面有两种，分别是synchronized,wait与notify&lt;br /&gt;
&lt;br /&gt;
7. abstract class和interface有什么区别?&lt;br /&gt;
&lt;br /&gt;
声明方法的存在而不去实现它的类被叫做抽象类（abstract class），它用于要创建一个体现某些基本行为的类，并为该类声明方法，但不能在该类中实现该类的情况。不能创建abstract 类的实例。然而可以创建一个变量，其类型是一个抽象类，并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract 类的子类为它们父类中的所有抽象方法提供实现，否则它们也是抽象类为。取而代之，在子类中实现该方法。知道其行为的其它类可以在类中实现这些方法。&lt;br /&gt;
接口（interface）是抽象类的变体。在接口中，所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的所有方法都是抽象的，没有一个有程序体。接口只可以定义static final成员变量。接口的实现与子类相似，除了该实现类不能从接口定义中继承行为。当类实现特殊接口时，它定义（即将程序体给予）所有这种接口的方法。然后，它可以在实现了该接口的类的任何对象上调用接口的方法。由于有抽象类，它允许使用接口名作为引用变量的类型。通常的动态联编将生效。引用可以转换到接口类型或从接口类型转换，instanceof 运算符可以用来决定某对象的类是否实现了接口&lt;br /&gt;
&lt;br /&gt;
8. Activity和Task的启动模式有哪些?&lt;br /&gt;
&lt;br /&gt;
standard: 标准模式 ，一调用 startActivity() 方法就会产生一个新的实例。&lt;br /&gt;
singleTop : 如果已经有一个实例位于 Activity 栈的顶部时，就不产生新的实例，而只是调用 Activity中的 newInstance() 方法。如果不位于栈顶，会产生一个新的实例。&lt;br /&gt;
singleTask : 会在一个新的 task 中产生这个实例，以后每次调用都会使用这个，不会去产生新的实例了。&lt;br /&gt;
singleInstance : 这个跟 singleTask 基本上是一样，只有一个区别：在这个模式下的 Activity 实例所处的 task 中，只能有这个 activity 实例，不能有其他的实例。&lt;br /&gt;
&lt;br /&gt;
9. 通过Intent传递一些二进制数据的方法有哪些?&lt;br /&gt;
&lt;br /&gt;
a. 使用Serializable接口实现序列化。&lt;br /&gt;
b. 实现Parcelable接口。&lt;br /&gt;
&lt;br /&gt;
10. handler机制的原理&lt;br /&gt;
&lt;br /&gt;
andriod 提供了 Handler 和 Looper 来满足线程间的通信。 Handler 先进先出原则。 Looper 类用来管理特定线程内对象之间的消息交换 (Message Exchange) 。&lt;br /&gt;
&lt;br /&gt;
1)Looper: 一个线程可以产生一个 Looper 对象，由它来管理此线程里的 Message Queue( 消息队列 ) 。&lt;br /&gt;
2)Handler: 你可以构造 Handler 对象来与 Looper 沟通，以便 push 新消息到 Message Queue 里; 或者接收 Looper 从 Message Queue 取出 ) 所送来的消息。&lt;br /&gt;
3)Message Queue( 消息队列 ): 用来存放线程放入的消息。&lt;br /&gt;
4)线程： UI thread 通常就是 main thread ，而 Android 启动程序时会替它建立一个 Message Queue 。&lt;br /&gt;
&lt;br /&gt;
11. android中线程与线程，进程与进程之间如何通信&lt;br /&gt;
&lt;br /&gt;
a 、一个 Android 程序开始运行时，会单独启动一个 Process 。&lt;br /&gt;
&lt;br /&gt;
默认情况下，所有这个程序中的 Activity 或者 Service 都会跑在这个 Process 。&lt;br /&gt;
&lt;br /&gt;
默认情况下，一个 Android 程序也只有一个 Process ，但一个 Process 下却可以有许多个 Thread。&lt;br /&gt;
&lt;br /&gt;
b 、一个 Android 程序开始运行时，就有一个主线程 Main Thread 被创建。该线程主要负责 UI 界面的显示、更新和控件交互，所以又叫 UI Thread 。&lt;br /&gt;
&lt;br /&gt;
一个 Android 程序创建之初，一个 Process 呈现的是单线程模型 — 即 Main Thread ，所有的任务都在一个线程中运行。所以， Main Thread 所调用的每一个函数，其耗时应该越短越好。而对于比较费时的工作，应该设法交给子线程去做，以避免阻塞主线程（主线程被阻塞，会导致程序假死 现象）。&lt;br /&gt;
&lt;br /&gt;
c 、 Android 单线程模型： Android UI 操作并不是线程安全的并且这些操作必须在 UI 线程中执行。如果在子线程中直接修改 UI ，会导致异常。&lt;br /&gt;
&lt;br /&gt;
12. 请介绍下 Android 中常用的五种布局&lt;br /&gt;
&lt;br /&gt;
FrameLayout （框架布局），&lt;br /&gt;
LinearLayout （线性布局），&lt;br /&gt;
AbsoluteLayout （绝对布局），&lt;br /&gt;
RelativeLayout （相对布局），&lt;br /&gt;
TableLayout （表格布局）。&lt;br /&gt;
&lt;br /&gt;
12. 什么是ANR? 如何避免它 ?&lt;br /&gt;
&lt;br /&gt;
ANR ： Application Not Responding ，五秒&lt;br /&gt;
在 Android 中，活动管理器和窗口管理器这两个系统服务负责监视应用程序的响应。当出现下列情况时， Android 就会显示 ANR 对话框了：&lt;br /&gt;
对输入事件 ( 如按键、触摸屏事件 ) 的响应超过 5 秒&lt;br /&gt;
意向接受器 (intentReceiver) 超过 10 秒钟仍未执行完毕&lt;br /&gt;
Android 应用程序完全运行在一个独立的线程中 ( 例如 main) 。这就意味着，任何在主线程中运行的，需要消耗大量时间的操作都会引发 ANR 。因为此时，你的应用程序已经没有机会去响应输入事件和意向广播 (Intent broadcast) 。&lt;br /&gt;
&lt;br /&gt;
因此，任何运行在主线程中的方法，都要尽可能的只做少量的工作。特别是活动生命周期中的重要方法如 onCreate() 和 onResume() 等更应如此。潜在的比较耗时的操作，如访问网络和数据库; 或者是开销很大的计算，比如改变位图的大小，需要在一个单独的子线程中完成 ( 或者是使用异步请求，如数据库操作 ) 。但这并不意味着你的主线程需要进入阻塞状态已等待子线程结束 — 也不需要调用 Therad.wait() 或者 Thread.sleep() 方法。取而代之的是，主线程为子线程提供一个句柄(Handler) ，让子线程在即将结束的时候调用它 。使用这种方法涉及你的应用程序，能够保证你的程序对输入保持良好的响应，从而避免因为输入事件超过 5 秒钟不被处理而产生的 ANR 。这种实践需要应用到所有显示用户界面的线程，因为他们都面临着同样的超时问题。&lt;br /&gt;
&lt;br /&gt;
==android 算法题==&lt;br /&gt;
&lt;br /&gt;
1. 有1000盏灯泡，第一轮点亮所有电灯，第二轮每两盏灯熄灭一盏，即熄灭第2盏，第4盏，以此类推，第三轮改变编号为3的倍数的电灯，第3盏，第6盏，如果原来那盏灯是亮的，就熄灭它，如果原来是灭的，就点亮它，以此类推，直到第1000轮。问第1000轮结束后，还有多少盏灯泡是亮的？&lt;br /&gt;
&lt;br /&gt;
答案:31盏&lt;br /&gt;
&lt;br /&gt;
2. 用伪代码编写一个函数，该函数在一个字符串中找到可能的最长的子字符串，且该字符串是由同一字符组成的。&lt;br /&gt;
&lt;br /&gt;
char * search(char *cpSource, char ch)&lt;br /&gt;
{&lt;br /&gt;
         char *cpTemp=NULL, *cpDest=NULL;&lt;br /&gt;
         int iTemp, iCount=0;&lt;br /&gt;
         while(*cpSource)&lt;br /&gt;
         {&lt;br /&gt;
                 if(*cpSource == ch)&lt;br /&gt;
                 {&lt;br /&gt;
                          iTemp = 0;&lt;br /&gt;
                          cpTemp = cpSource;&lt;br /&gt;
                          while(*cpSource == ch)&lt;br /&gt;
                               ++iTemp, ++cpSource;&lt;br /&gt;
                          if(iTemp &amp;gt; iCount)&lt;br /&gt;
                              iCount = iTemp, cpDest = cpTemp;&lt;br /&gt;
                         if(!*cpSource)&lt;br /&gt;
                              break;&lt;br /&gt;
                 }&lt;br /&gt;
                 ++cpSource;&lt;br /&gt;
       }&lt;br /&gt;
        return cpDest;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
3. 请用伪代码实现在小于99999的正整数中找符合下列条件的数，它既是完全平方数，又有两位数字相同，如：144，676。（不能用数字转换成字符串）&lt;br /&gt;
&lt;br /&gt;
int havesamenum(int num)&lt;br /&gt;
{&lt;br /&gt;
    int i=0,j;&lt;br /&gt;
    char a[10] = {0};&lt;br /&gt;
&lt;br /&gt;
    while(num&amp;gt;0)&lt;br /&gt;
    {&lt;br /&gt;
        j=num%10;&lt;br /&gt;
        a[j]+=1;&lt;br /&gt;
        num=num/10;&lt;br /&gt;
    }&lt;br /&gt;
    while(a[i]&amp;lt;=1&amp;amp;&amp;amp;i&amp;lt;10)&lt;br /&gt;
        i++;&lt;br /&gt;
    if (i&amp;lt;10)&lt;br /&gt;
        return 1;&lt;br /&gt;
    else&lt;br /&gt;
        return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
void main(void)&lt;br /&gt;
{&lt;br /&gt;
    int i,j,m;&lt;br /&gt;
&lt;br /&gt;
    m=(int)sqrt(99999);&lt;br /&gt;
    for(i=1;i&amp;lt;m;i++)&lt;br /&gt;
    {&lt;br /&gt;
        j=i*i;&lt;br /&gt;
        if (1==havesamenum(j))&lt;br /&gt;
            printf(&amp;quot;%6d\t&amp;quot;,j);&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
4、用伪代码实现： 求n个数（1....n）中k个数的组合.... ?&lt;br /&gt;
如：n=5,k=3 输出：543，542，541，532，531，521，432，431，421，321&lt;br /&gt;
&lt;br /&gt;
int pop(int *);&lt;br /&gt;
int push(int );&lt;br /&gt;
void combination(int ,int);&lt;br /&gt;
&lt;br /&gt;
int stack[3]={0};&lt;br /&gt;
int top = -1;&lt;br /&gt;
&lt;br /&gt;
void combination(int m,int n)&lt;br /&gt;
{&lt;br /&gt;
    int temp = m;&lt;br /&gt;
    push(temp);&lt;br /&gt;
    while(1)&lt;br /&gt;
    {&lt;br /&gt;
        if(1==temp)&lt;br /&gt;
        {&lt;br /&gt;
            if(pop(&amp;amp;temp) &amp;amp;&amp;amp; stack[0]==n)&lt;br /&gt;
                break;&lt;br /&gt;
        }&lt;br /&gt;
        else if(push(--temp))&lt;br /&gt;
        {&lt;br /&gt;
            printf(&amp;quot;%d%d%d\n&amp;quot;,stack[0],stack[1],stack[2]);&lt;br /&gt;
            pop(&amp;amp;temp);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int push(int i)&lt;br /&gt;
{&lt;br /&gt;
    stack[++top]=i;&lt;br /&gt;
    if(top&amp;lt;2)&lt;br /&gt;
        return 0;&lt;br /&gt;
    else&lt;br /&gt;
        return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
int pop(int *i)&lt;br /&gt;
{&lt;br /&gt;
    *i = stack[top--];&lt;br /&gt;
    if(top&amp;gt;=0)&lt;br /&gt;
        return 0;&lt;br /&gt;
    else&lt;br /&gt;
        return 1;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
5、有两个数组a,b，大小都为n, 数组元素的值任意整数，无序；?要求：通过交换a,b中的元素，使[数组a元素的和]与[数组b元素的和]之间的差最小。?(用伪代码实现)&lt;br /&gt;
例如: var a=[100,99,98,1,2, 3];&lt;br /&gt;
     var b=[1, 2, 3, 4,5,40];&lt;br /&gt;
&lt;br /&gt;
bool Swap2Balance(int *pa, int *pb, int n)&lt;br /&gt;
{&lt;br /&gt;
    int suma=0,sumb=0;&lt;br /&gt;
    for (int i=0;i&amp;lt;n;i++)&lt;br /&gt;
    {&lt;br /&gt;
        suma+=pa[i];&lt;br /&gt;
        sumb+=pb[i];&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    int diff=suma-sumb;&lt;br /&gt;
    while (diff!=0)&lt;br /&gt;
    {&lt;br /&gt;
        int besti=0,bestj=0;&lt;br /&gt;
        int bestchange=0;&lt;br /&gt;
        for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;
            for (int j=0;j&amp;lt;n;j++)&lt;br /&gt;
            {&lt;br /&gt;
                int change=(pa[i]-pb[j]);&lt;br /&gt;
                //交换后差为(suma-pa[i]+pb[j])-(sumb+pa[i]-pb[j])=diff-2*change&lt;br /&gt;
                if (abs(diff-2*change)&amp;lt;abs(diff-2*bestchange))&lt;br /&gt;
                {&lt;br /&gt;
                    bestchange=change;&lt;br /&gt;
                    besti=i;&lt;br /&gt;
                    bestj=j;&lt;br /&gt;
                }&lt;br /&gt;
            }&lt;br /&gt;
        if (bestchange==0)    //差不能再缩小&lt;br /&gt;
            return false;&lt;br /&gt;
        int temp=pa[besti];&lt;br /&gt;
        pa[besti]=pb[bestj];&lt;br /&gt;
        pb[bestj]=temp;&lt;br /&gt;
        suma-=bestchange;&lt;br /&gt;
        sumb+=bestchange;&lt;br /&gt;
        diff=suma-sumb;&lt;br /&gt;
    }&lt;br /&gt;
    return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
6、输入一个正整数数组，将它们连接起来排成一个数，输出能排出的所有数字中最小的一个。如{10,675,23},输出最小数字为1023675。(用伪代码实现)&lt;br /&gt;
    //伪代码&lt;br /&gt;
    int compare(int A,int B){  &lt;br /&gt;
        m = A的位数;&lt;br /&gt;
        n = B的位数;&lt;br /&gt;
        k = min(m,n);&lt;br /&gt;
        for i=[1,k]{&lt;br /&gt;
            if a[i]&amp;lt;b[i]&lt;br /&gt;
                return -1;&lt;br /&gt;
            else if a[i]&amp;gt;b[i]&lt;br /&gt;
                return 1;&lt;br /&gt;
        }&lt;br /&gt;
        // 上一个for循环如果没有return，则说明某个数和另一个数的前部分完&lt;br /&gt;
        //全相同，则进行下面的比较&lt;br /&gt;
        k = m-n;&lt;br /&gt;
        if(k&amp;lt;0){&lt;br /&gt;
            for i=[1,-k]{&lt;br /&gt;
                if B[i]&amp;lt;B[m+i]&lt;br /&gt;
                    return -1;&lt;br /&gt;
                else if B[i]&amp;gt;B[m+i]&lt;br /&gt;
                    return 1;&lt;br /&gt;
            }&lt;br /&gt;
        }else{&lt;br /&gt;
            for i=[1,k]&lt;br /&gt;
                if A[i]&amp;lt;A[m+i]&lt;br /&gt;
                    return -1;&lt;br /&gt;
                else if A[i]&amp;gt;A[m+i]&lt;br /&gt;
                    return 1;&lt;br /&gt;
        }&lt;br /&gt;
        return 0;&lt;br /&gt;
    }&lt;/div&gt;</summary>
		<author><name>Tom</name></author>	</entry>

	</feed>