星海's Blog

老头初学编程
Python学习笔记(三)
转贴:projecteuler vs ACM and the path

C未解决的问题

星海 posted @ 2010年10月20日 08:48 in Python学习 , 1855 阅读

1、定义一个数组,编程打印它的全排列。比如定义:

#define N 3
int a[N] = { 1, 2, 3 };
 
程序的主要思路是:
1. 把第1个数换到最前面来(本来就在最前面),准备打印1xx,再对后两个数2和3做全排列。
2. 把第2个数换到最前面来,准备打印2xx,再对后两个数1和3做全排列。
3. 把第3个数换到最前面来,准备打印3xx,再对后两个数1和2做全排列。
可见这是一个递归的过程,把对整个序列做全排列的问题归结为对它的子序列做全排列的问题,注
意我没有描述Base Case怎么处理,你需要自己想。你的程序要具有通用性,如果改变了N和数
组a的定义(比如改成4个数的数组),其它代码不需要修改就可以做4个数的全排列(共24种排
列)。
完成了上述要求之后再考虑第二个问题:如果再定义一个常量M表示从N个数中取几个数做排列(N
== M时表示全排列),原来的程序应该怎么改?
最后再考虑第三个问题:如果要求从N个数中取M个数做组合而不是做排列,就不能用原来的递归过
程了,想想组合的递归过程应该怎么描述,编程实现它。
 
 
 
要看的书
数据结构,操作系统,组成原理,网络
Avatar_small
Wayne 说:
2010年10月21日 17:06

打印的规则都没看出来... 如果diamond(6,'+')还能打印吗? diamond(7,'+')又是怎样的呢?

Avatar_small
星海 说:
2010年10月21日 21:34

哈哈,这个怨我,没写清楚问题

如果用偶数做参数则打印错误提示。 ^__^

7是可以的,6不可以。。。

Avatar_small
Kflayca 说:
2010年10月23日 03:28

diamond那个,数字只能为奇数吧,代码我有……
全排列就是最简单的搜索啊……

Avatar_small
星海 说:
2010年10月23日 20:17

哈哈,我是初学者

这些题目都是 《linux C一站式学习编程》的课后习题

我也有答案。。。。。。
想以后自己能做出来。。


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter