练习20140814

/********************************************************************
@file     Main_practise.cpp
@date     2014-8-14
@author   Tiger
@brief    全排列
		  由于采用非递归的C++函数来输出n个元素的所有排列方式很困难,
		  所以可以开发一个递归函数来实现。令E={e1,...,en}表示n个元素
		  的集合,我们的目标是生成该集合的所有排列方式。令Ei为E中移
		  去元素i以后所获得的集合,perm(X)表示集合X中元素的排列方式,
		  ei.perm(X)表示在perm(X)中的每个排列方式的前面均加上ei以后所
		  得到的排列方式。例如,如果E={a,b,c},那么E1={b,c},perm(E1)=(bc,cb),
		  e1.perm(E1)=(abc,acb)。对于递归的基本部分,采用n=1。当只有一
		  个元素时,只可能产生一种排列方式,所以perm(E)=(e),其中e是
		  E中的唯一元素。当n>1时,perm(E)=e1.perm(E1)+e2.perm(E2)+e3.perm(E3)+ ? +en.perm(En)。
		  这种递归定义形式是采用n个perm(X)来定义perm (E), 其中每个X包含n-1个元素。
		  至此,一个完整的递归定义所需要的基本部分和递归部分都已完成。

		  当n=3并且E=(a,b,c)时,按照前面的递归定义可得perm(E)=a.perm({b,c})+b.perm({a,c})+c.perm({a,b})。
		  同样,按照递归定义有perm({b,c})=b.perm({c})+c.perm({b}), 所以
		  a.perm({b,c})=ab.perm({c})+ac.perm({b})=ab.c+ac.b=(abc,acb)。同理可得
		  b.perm({a,c})=ba.perm({c})+bc.perm({a})=ba.c+bc.a=(bac,bca),
		  c.perm({a,b})=ca.perm({b})+cb.perm({a})=ca.b+cb.a=(cab,cba)。
		  所以perm(E)=(abc,acb,bac,bca,cab,cba)。
********************************************************************/
#include <iostream>

const int SIZE = 5;

template <typename T>
void CalFullArray(T array[], int nBeg, int nEnd);

template <typename T>
void Swap(T& a, T& b);

int main(int argc, const char* argv[])
{
	int array[SIZE] = {1, 2, 3, 4, 5};
	CalFullArray(array, 0, SIZE-1);

	system("pause");
	return 0;
}

template <typename T>
void CalFullArray(T array[], int nBeg, int nEnd)
{
	if (nBeg == nEnd)
	{
		for (int i=0; i<=nEnd; ++i)
		{
			std::cout << array[i];
		}
		std::cout << std::endl;
	}
	else
	{
		for (int i=nBeg; i<=nEnd; ++i)
		{
			Swap(array[nBeg], array[i]);
			CalFullArray(array, nBeg+1, nEnd);
			Swap(array[nBeg], array[i]);
		}
	}
}

template <typename T>
void Swap(T& a, T& b)
{
	int temp = a;
	a = b;
	b = temp;
}

练习20140814

时间: 2024-07-31 11:40:05

练习20140814的相关文章

【实习记】2014-08-14新版本的apache已默认不支持cgi+C语言中的scanf未解之迷

总结1:ubuntu14.04上的apache2.4.7默认没有cgi模块,而ubuntu10.04是的apache2.2.14默认是有的. 起因:每次都用ubuntu14.04上的VBox里运行的ubuntu10.04上的apache2,感觉略麻烦,于是直接在ubuntu14.04上装个apache2. 发现/cgi-bin/里的cgi总是404,反复确认配置目录没错. 怀疑权限问题(但一般会是5XX而不是404),最后无果. 搜索多次,资料不多,最后找到线索和答案,就是默认不支持了,对于开源

20140814 explicit

1.explicit explicit   只对构造函数起作用,用来抑制隐式转换. 如:     class   A   {        A(int   a);   };  int   Function(A   a);   当调用   Function(2)   的时候,2   会隐式转换为   A   类型.这种情况常常不是程序员想要的结果,所以,要避免之,就可以这样写:   class   A {       explicit   A(int   a);   };   int   Func

.NET C#语言基础 20140814

一..NET历史 1. .NET的发展史 网络      --      HTML        --      ASP/ASP.NET      --     ASPX        --        .NET DOS黑屏        静态页面           动态页面--数据库           ASP无限扩展           2002年 2. .NET软件更新 二.C#编程 1.项目结构 .cs——程序代码文件,源文件 .config——配置文件 .csproj——项目文件(

log4j.xml的实用例子

大多数讲log4j配置的教程用的都是log4j.properties文件,我觉得xml或许更好一点,在这里我提供一个我已经用于生产环境的log4j.xml的例子,先上代码,然后再解释: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE log4j:configuration PUBLIC "-//log4j/log4j Configuration//EN" "log4j.

python 时间模块小结(time and datetime)

一:经常使用的时间方法 1.得到当前时间 使用time模块,首先得到当前的时间戳 In [42]: time.time() Out[42]: 1408066927.208922 将时间戳转换为时间元组 struct_time In [43]: time.localtime(time.time()) Out[43]: time.struct_time(tm_year=2014, tm_mon=8, tm_mday=15, tm_hour=9, tm_min=42, tm_sec=20, tm_wd

http://mirror.centos.org/centos/7.2.1511/os/x86_64/Packages/, 开源软件清单list

http://mirror.centos.org/centos/7.2.1511/os/x86_64/Packages/ http://vault.centos.org/7.2.1511/os/Source/SPackages/ Name Last modified Size Description Parent Directory   -   389-ds-base-1.3.4.0-19.el7.x86_64.rpm 2015-11-25 14:10 1.7M   389-ds-base-de

本地推送通知UILocalNotification

1 - (IBAction)schedule { 2 // 1.创建本地推送通知对象 3 UILocalNotification *ln = [[UILocalNotification alloc] init]; 4 5 // 2.设置通知属性 6 // 音效文件名 7 ln.soundName = @"buyao.wav"; 8 9 // 通知的具体内容 10 ln.alertBody = @"重大新闻:xxxx xxxx被调查了...."; 11 12 // 锁

《黑客与画家》阅读笔记

(本人正在参加2015博客之星评选,诚邀你来投票,谢谢:http://vote.blog.csdn.net/blogstar2015/candidate?username=zhouzxi) (今天看了池建强老师的文章<再读黑客与画家(一)>,想到自己之前也写过有关这本书的文章,遂贴出来,各位看官慢慢品尝!) 在很多人的印象中,黑客是一群非常神秘的.编程技术非常高超的人,他们可以随心所欲地操纵计算机.盗取别人电脑上面的资料.而画家无非是一群以画画为生或对画画有着很浓厚的兴趣的人.那么,黑客与画家

iOS-ARC

1. 本文的主要内容: ARC的本质 ARC的开启与关闭 ARC的修饰符 ARC与Block ARC与Toll-Free Bridging ARC的本质 ARC是编译器(时)特性,而不是运行时特性,更不是垃圾回收器(GC). Automatic Reference Counting (ARC) is a compiler-level feature that simplifies the process of managing object lifetimes (memory managemen