用已知字符串s中的字符,生成由其中n个字符组成的所有字符排列。设n小于字符串s的字符个数,其中s中的字符在每个排列中最多出现一次。例

booming 2003-08-31 01:59:18
用已知字符串s中的字符,生成由其中n个字符组成的所有字符排列。设n小于字符串s的字符个数,其中s中的字符在每个排列中最多出现一次。例如:对于
s[]="abc",n=2
则所有的字符排列:
ab,ba,ca,ac,bc,cb
请问,能否用非递归,且不要数组,栈等做出?
请讲出思想先。谢谢!
...全文
180 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
booming 2003-09-01
  • 打赏
  • 举报
回复
faint:(
WYlslrt 2003-09-01
  • 打赏
  • 举报
回复
可以用baisc,这个语言支持,变量为字符型,可以运算。
例如
dim a,b as string
a="hello"
b=" WY"
a=a+b
所以
a="hello WY"
booming 2003-09-01
  • 打赏
  • 举报
回复
up
booming 2003-08-31
  • 打赏
  • 举报
回复

是啊,如果能用数组,试探法就可以做了。
但,不知能否不要数组,有啥法子。
当然,更不要用啥栈等。
lyblangzi 2003-08-31
  • 打赏
  • 举报
回复
先用字典排序生成N个字符的组合
然后对每一个组合生成它的排序
在《组合数学》(国外经典教材系列)中有它的算法
WYlslrt 2003-08-31
  • 打赏
  • 举报
回复
可以这样遍历:
s=1234567
n=3
123 124 125 126 127
134 135 136 137
145 146 147
156 157
167
234 235 236 237........
没时间,只好写出相似的。
slen为s的长度
int i,temp,t[n]; char str[n];
temp = 0;
for(i=0;i<n;++i){
if(str[i] != s[slen-1]){ //组合元素
str[i]=s[temp];
t[i]=temp;
if(i=n-1){
i--;
}
temp++;
if(temp=7) temp=0;
}
else{
i=i-2;
temp=(t[i]+1)%7;
}
if(str[0]=str[slen-1]) break;
}

因写的匆忙,如有错误请高手指出,谢谢

WYlslrt 2003-08-31
  • 打赏
  • 举报
回复
用循环吧,把每一个都遍历一遍,


WYlslrt 2003-08-31
  • 打赏
  • 举报
回复
不用数祖?
booming 2003-08-31
  • 打赏
  • 举报
回复


能否不要额外工作数组。
寻开心 2003-08-31
  • 打赏
  • 举报
回复
先要统计字符串当中有无重复的字母
然后再用排列组合的办法,search老帖子吧
ZhangYv 2003-08-31
  • 打赏
  • 举报
回复
http://expert.csdn.net/Expert/FAQ/FAQ_Index.asp?id=2987
本视频以程序员的视角分析和阐述了以下几方面的内容:第一,主要阐述人类的思维活动模式;第二,阐述人工智能如何实现;第三,讲解人工智能的具体实现方法。在阐述这三点主要内容的同时,通过具体示说明了自然语言在开发人工智能时的重要作用,即自然语言是人类在认知自然时抽象的产物,是思维和自然联系的工具。利用在人工智能开发时,是人工智能和人类的沟通桥梁,时人工智能思维产物被人类认知的桥梁。所以说自然语言是开发人工智能必不可少的工具。人们在认知自然界的时候,获取的所有信息都是抽象后的信息。也就是我们的感官能够接收或感受到的信息。换句话说,就是获取的到信息都只是某个事物的一部分信息。比如眼前的显示器:眼睛看到的只是它的颜色、形状和大小,用手只能感知到它的重量及是否光滑、温度等信息,鼻子只能感知到其散发的味道。而它只有这些信息吗?当然不止,只是其它信息我们无法感知,或者不需要知道而已,因为已知的信息已经足够满足我们对其认知的需要了。加入我们需要移动显示器的时候,我们知道其外壳是塑料的,足够结实,能够保护屏幕就可以了,塑料的具体成分,我们不需要去了解就已经能满足我们认知的需要了。然后我们就可以拿着外壳移动显示器了。换个说法也可以:我们在认知自然界的时候,只是认知了事物的部分特征。这些特征已经基本满足了我们的认知需求。而特征就是事物的部分性质的抽象信息。自然语言就是最佳的抽象工具。通过自然语言,我们才能够将事物抽象为一个个的名词;将连续的动作抽象为动词;将描述名词和动词的信息抽象为形容词和副词;为了更加精确的描述事物的多少,产生了数量词来做度量衡;为了更加完美的描述自然界,又衍生出了虚词;为了表示关系,产生了介词;为了表示逻辑,产生了连词。而作为人类描述自然界事物的工具,自然语言也天然是人工智能和人类沟通交流的工具。现在的计算机及相关的软硬件已经十分的丰富。完全具备实现人工智能的条件,市面也流行着很多人工智能的算法,但在我看来这些算法充其量可以作为人工智能的部分外。如图像识别、深度学习、NLP、机械臂等,可以为人工智能的眼睛、判别工具、手腿等外。因为这些算法都有以下几个缺点:一、不会自动产生需求。除了定好的目标外,无法识别人类的其它指令,也就无法做出正确的响应;二、方法是事先固化的,除固定的算法外,对于新的需求无法自动生成新的算法。三、对于目标无法自动定达成标准,也就是说没有办法自动判断自己的动作执行结果是否符合自己的需求。四、无法自动生成目标,也就是说没有主动性。当遇到复杂任务时,无法通过分解任务来完成。本文站在程序员的视角,分三章系统的分析了人类的思维方式,并转化为程序逻辑,最终实现使用计算机程序来完成人类的思维过程。第一章主要是讲述的是人类的思维方式;第二章主要讲述的是如何将人类思维需要的信息进行数据化,以便于存储到电脑;第三章主要讲述的是程序的逻辑架构和部分实现方法。

33,008

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧